Unity3D中隨機函式的應用

2022-09-15 06:42:15 字數 1712 閱讀 7891

出處

電子遊戲中玩家與系統進行互動的樂趣絕大多數取決於事件發生的不可預知性和隨機性。在unity3d的api中提供了random類來解決隨機問題。

最簡單的應用就是在陣列中隨機選擇乙個元素,使用random內建的方法可以進行選擇。**如下:

floatelement=myarray[random.range(0,myarray.length)];

random.range方法的兩個引數代表了選擇資料元素的範圍。

很多時候,遊戲中運用更複雜的隨機事件,下面描述幾種常見的隨機事件案例

1:隨機選擇具有不同概率的事件

當你你需要選擇具有不同發生概率的事件元素時。運用的場景為在遊戲中玩家遇到npc時,npc在系統內部有好幾種與玩家互動的方法。但是這些方法發生的概率並不相等。例如有50%機率進行問好;25%機率跑開;20%機率攻擊玩家;5%機率為玩家提供禮品。

學過概率統計學的同學,一定做過在連續時間內發生事件概率的模型。我們也可以將上面描述的需求抽象為乙個模型,我們將整個npc與玩家互動系統看做乙個紙帶,按照事件發生的概率將紙帶分為若干段,將大概率事件排在前面,小概率事件排在後面。當玩家遇到npc時代表在這個紙帶上隨機選擇乙個點。抽象結果用圖如下:

隨機選擇的點在哪個事件範圍內就會發生相應的事件。將這個模型用**表示為:

float choose(float probs)

方法返回乙個0—1的隨機數

float randompoint=random.value*total;

for(int i=0;i)

return probs.length-1;

}

過程描述:首先檢查隨機數是否小於第乙個元素,如果小於那麼第乙個元素就被選擇了。否則用隨機數的值減去第乙個元素的值然後與第二個元素進行比較,以此類推直到找到正確的元素為止。

過程驗證:如上圖所示,假如隨機數最終為82,那麼首先將82與第乙個元素50比較:82>50,因此應該將82-50=32與第二個元素25進行比較:32>25,因此應該將32-25=7與第三個元素20進行比較:7<20,那麼第三個元素被選中,相對應的事件發生。

2:使用隨機數打亂陣列順序

這個案例應用的最好場景就是紙牌遊戲中的洗牌操作,思想也比較簡單,就是依次將陣列內的每個元素與乙個隨機序號的元素進行交換。**如下:

void shuffle(int cards)

}

3:使用隨機數在陣列中無重複的選擇元素在概率論中我們常常見到這樣題目:乙個球隊10個人,要選擇5個人去參加比賽。在遊戲中的應用場景為你希望在幾個不同的點隨機生成乙個不相同的npc。例如需要在10個npc中隨機選擇5個,第乙個npc被選中的概率為5/10,如果第乙個被選中了那麼第二個被選中的概率就變成了4/9,如果第乙個被淘汰那麼第二個被選中的概率就為5/9

transform spawnpoints;

transform chooseset(intnumrequired)

}returnresult;

}

過程描述:掃瞄待選擇的npc陣列,如果生成的隨機數小於被選中的概率則表示該元素被選中,直到所需要的元素個數都被選中。

注意點:進行選擇的時候應該先將待選擇的npc陣列進行「洗牌「操作

Unity3D中隨機函式的應用

電子遊戲中玩家與系統進行互動的樂趣絕大多數取決於事件發生的不可預知性和隨機性。在 unity3d 的api 中提供了 random 類來解決隨機問題。最簡單的應用就是在陣列中隨機選擇乙個元素,使用 random 內建的方法可以進行選擇。如下 floatelement myarray random.r...

Unity3D中隨機函式的應用

電子遊戲中玩家與系統進行互動的樂趣絕大多數取決於事件發生的不可預知性和隨機性。在 unity3d 的api 中提供了 random 類來解決隨機問題。最簡單的應用就是在陣列中隨機選擇乙個元素,使用 random 內建的方法可以進行選擇。如下 floatelement myarray random.r...

Unity3D中隨機函式的應用

電子遊戲中玩家與系統進行互動的樂趣絕大多數取決於事件發生的不可預知性和隨機性。在 unity3d 的api 中提供了 random 類來解決隨機問題。最簡單的應用就是在陣列中隨機選擇乙個元素,使用 random 內建的方法可以進行選擇。如下 floatelement myarray random.r...