unity 3d 随机函数中应用的问题


 

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]);
        }

 

 

运行下,看结果:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM