Unity 3d中封裝好了一個隨機函數給我們用,這個就是:
Random.Range ()
static function Range (min : float, max : float) : float
返回一個隨機浮點數,在min(包含)和max(包含)之間。(只讀)
使用方法是:
int index = Random.Range(0, 2);
不過要注意的是我們得到的值是0或者1,並不是0,1,2.
隨機數在我們生活中或者游戲中很常見例如大家都知道的中獎,中獎是有概率的么並不是每個人都能中到。中獎的概率是少之又少啊,買彩票估計是幾億分之一吧。下面我就來句2個生活中最常見的例子。
1.隨機帶概率:假設有A、B、C、D這4種類型的敵人,在游戲中每種類型出現的概率分別為為40% 、25%、20%、15%。現在就隨機出現一個敵人。
思路:我們就可以在0-99這100個數之間隨機生成一個數,然后再根據這個數是在哪個范圍段中進行判斷。
代碼:
void RandomEnemy() { int randomEnemyId = Random.Range(0, 100); if (randomEnemyId <= 39) { Debug.Log("我是A類型敵人"); } else if (randomEnemyId > 39 && randomEnemyId <= 64) { Debug.Log("我是B類型敵人"); } else if (randomEnemyId > 64 && randomEnemyId <= 84) { Debug.Log("我是C類型敵人"); } else { Debug.Log("我是D類型敵人"); } }
運行下,看結果:
2.隨機且不重復: 在打牌游戲中,發牌就是用到這個的,在一副牌中,隨機分發出去,且不重復。
思路:借用一個數組來保存我們得到的結果,先隨機生成一個索引,然后把原始數組中的當前索引號的值取出來,放進結果數組里面,再把最后一個數組的值給原始數組中索引號為隨機索引中的數組值,然后使隨機數的上限減一,如:先把這100個數放在一個數組內,每次隨機取一個位置(第一次是1-100,第二次是1-99,...),將該位置的數用最后的數代替。
代碼:
List<int> GetDontRepeatRandomNumbers(int length, int getcount) { List<int> resultArray = new List<int>(); List<int> originalArray = new List<int>(); for (int i = 0; i < length; i++) { originalArray.Add(i); } int randomIndex = 0, count = length, temp = 0; for (int i = 0; i < getcount; i++) { randomIndex = Random.Range(0, count); resultArray.Add(originalArray[randomIndex]); if (randomIndex != count - 1) { temp = originalArray[randomIndex]; originalArray[randomIndex] = originalArray[count - 1]; originalArray[count - 1] = temp; } count--; } return resultArray; }
使用:
List<int> arr = GetDontRepeatRandomNumbers(20, 10); for (int i = 0; i < arr.Count; i++) { Debug.Log(arr[i]); }
運行下,看結果: