最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

添加隨機(jī)的游戲元素-Unity

2020-12-31 09:39 作者:unity_某某師_高錦錦  | 我要投稿

一、從數(shù)組選擇隨機(jī)項(xiàng)目

可隨機(jī)挑選數(shù)組元素:
1.是因?yàn)槟軌蜻x擇零到數(shù)組最大索引值(等于數(shù)組長(zhǎng)度減去一)之間的隨機(jī)整數(shù)。
2.使用內(nèi)置 Random.Range 函數(shù)就可輕松做到:


請(qǐng)注意:Random.Range 從包含第一個(gè)參數(shù)但排除第二個(gè)參數(shù)的范圍中返回一個(gè)值,所以在此處使用 myArray.Length 能給出正確結(jié)果。

二、用不同概率選擇項(xiàng)目

1.概率:

有時(shí)候,您需要隨機(jī)選擇項(xiàng)目,但有些項(xiàng)目被選中的概率比其他項(xiàng)目大。
例如,NPC 在遇到玩家時(shí)會(huì)以幾種不同的方式作出反應(yīng):-

50% 的機(jī)率會(huì)友好問(wèn)候
25% 的機(jī)率會(huì)跑開(kāi)
20% 的機(jī)率會(huì)立即攻擊
5% 的機(jī)率會(huì)提供 金錢(qián)作為禮物
您可以想象這些不同的結(jié)果分布在分成幾部分的條形紙上,每種結(jié)果占總長(zhǎng)度的一部分。
所占部分與選中結(jié)果的概率相等。做選擇就是選取條形紙長(zhǎng)度上的隨機(jī)點(diǎn)(比如說(shuō)扔飛鏢),然后看看它落在哪個(gè)部分。

概率樣圖

1.在腳本中,條形紙實(shí)際上是一個(gè)浮點(diǎn)數(shù)組,按順序包含項(xiàng)目的不同概率。隨機(jī)點(diǎn)由 Random.value 乘以數(shù)組中所有浮點(diǎn)總數(shù)得出(它們合計(jì)起來(lái)不一定等于 1;重點(diǎn)是不同值獲得的相對(duì)大?。?。
2.要找出隨機(jī)點(diǎn)“落在”哪個(gè)數(shù)組元素,首先檢查看它是否小于第一個(gè)元素的值。如果是,則將選中第一個(gè)元素。否則,從點(diǎn)值減去第一個(gè)元素的值,再與第二個(gè)元素比較,直到找到正確的元素。類似于下面這個(gè)代碼:-



請(qǐng)注意:最后一個(gè)返回語(yǔ)句不能省,因?yàn)?Random.value 會(huì)返回結(jié)果 1。

在這種情況下,無(wú)法搜索到隨機(jī)點(diǎn)。更改代碼行

一個(gè)小于或等于的測(cè)試會(huì)避免額外的返回語(yǔ)句,但即便選中一個(gè)項(xiàng)目的概率為零,也允許偶爾選中該項(xiàng)目。

2.隨機(jī)排序:

一個(gè)普遍的游戲機(jī)制是從一組隨機(jī)排序的已知項(xiàng)目中進(jìn)行選擇。
例如,一副牌通常被打亂,這樣就不會(huì)以可預(yù)測(cè)的順序抓牌。您可以通過(guò)訪問(wèn)數(shù)組中的每個(gè)元素,并隨機(jī)與數(shù)組中的其他元素交換,來(lái)打亂數(shù)組項(xiàng)目的順序:
代碼如下(示例):



3.從一組項(xiàng)目中非重復(fù)選?。?/strong>

1.常見(jiàn)任務(wù)是從一組項(xiàng)目中隨機(jī)挑選若干項(xiàng)目,同一個(gè)項(xiàng)目最多只能選中一次。
例如,您可能想在隨機(jī)復(fù)活點(diǎn)生成若干 NPC,但要確保每個(gè)點(diǎn)處只能生成一個(gè) NPC。為此,可以依次迭代項(xiàng)目,隨機(jī)決定每個(gè)項(xiàng)目是否要添加到選擇集。
訪問(wèn)完每個(gè)項(xiàng)目后,剩下項(xiàng)目被選中的概率等于需要選擇的項(xiàng)目數(shù)量除以剩下的所有項(xiàng)目數(shù)量。

2.例如,假設(shè)有十個(gè)復(fù)活點(diǎn)可選,但必須只能選擇五個(gè)。
第一個(gè)項(xiàng)目被選中的概率是 5 / 10 或 0.5。如果選擇第一個(gè)項(xiàng)目,
則第二個(gè)項(xiàng)目的概率為 4 / 9 或 0.44(即仍需從九個(gè)剩下的項(xiàng)目中選擇四個(gè))。然而,如果沒(méi)有選擇第一個(gè)項(xiàng)目,則第二個(gè)項(xiàng)目的概率為 5 / 9 或 0.56(即仍需從九個(gè)剩下的項(xiàng)目中選擇五個(gè))。這個(gè)操作一直持續(xù)到選擇集包含五個(gè)所需項(xiàng)目。您可以在如下代碼中完成此目的:



請(qǐng)注意:盡管選擇是隨機(jī)的,但選擇集中的項(xiàng)目與在原始數(shù)組中的順序相同。如果項(xiàng)目排序是一次性的話,那么部分隨機(jī)項(xiàng)目是可預(yù)見(jiàn)的,所以有必要在使用之前打亂數(shù)組的順序。

4.空間中的隨機(jī)點(diǎn):

將 Vector3 每個(gè)分量設(shè)為 Random.value 返回的值,通過(guò)這種方式來(lái)選擇三維空間中的隨機(jī)點(diǎn):

1.上述函數(shù)在邊長(zhǎng)為一個(gè)單位的立方體中給出一個(gè)點(diǎn)。將向量的 X、Y 和 Z 分量乘以所需邊長(zhǎng),就可將立方體進(jìn)行簡(jiǎn)單的縮放。如果一個(gè)軸的值設(shè)為零,該點(diǎn)始終位于單一平面。例如,如選擇“地面”上的一個(gè)隨機(jī)點(diǎn),通常是隨機(jī)設(shè)置 X 和 Z 分量,而將 Y 分量設(shè)為零。


2.當(dāng)它是一個(gè)球體時(shí)(即:當(dāng)您想從原點(diǎn)引出的給定半徑內(nèi)獲取一個(gè)隨機(jī)點(diǎn)時(shí)),您可以用 Random.insideUnitSphere 乘以所需半徑大小:-

請(qǐng)注意,如果您將結(jié)果向量的某個(gè)分量設(shè)為零,則不能在一個(gè)圓內(nèi)獲得正確的隨機(jī)點(diǎn)。

盡管該點(diǎn)確實(shí)是隨機(jī)的,且在右半徑內(nèi),但點(diǎn)的分布概率在很大程度上會(huì)偏向圓的邊緣,因此點(diǎn)分布極不均勻。為完成此任務(wù),應(yīng)當(dāng)使用 Random.insideUnitCircle:


添加隨機(jī)的游戲元素-Unity的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
苏尼特左旗| 福建省| 长寿区| 虞城县| 云梦县| 抚松县| 嵩明县| 旬阳县| 普定县| 禹州市| 晋州市| 蒙自县| 海伦市| 宽甸| 门头沟区| 太白县| 岳阳市| 建瓯市| 六枝特区| 哈巴河县| 双流县| 从化市| 壤塘县| 宁陵县| 岱山县| 碌曲县| 乌恰县| 奉贤区| 榆树市| 兴和县| 石门县| 庆城县| 上杭县| 古田县| 五常市| 浙江省| 乌海市| 马关县| 松原市| 达尔| 张家港市|