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