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]); }
运行下,看结果: