Unity3D利用隨機數(shù)種子每次產生同樣的隨機數(shù)

一般計算機的隨機數(shù)都是偽隨機數(shù),以一個真隨機數(shù)(隨機數(shù)種子)作為初始條件,然后用一定的算法不停迭代產生隨機數(shù)。Unity產生隨機數(shù)都是Random.Range方法產生出偽隨機數(shù),每次啟動產生的隨機數(shù)都不一樣。

for (int i = 0; i < 10; i++)
{
    Debug.Log(Random.Range(1, 100));
}
1.png

這兩條log是兩次啟動產生的隨機數(shù),可以看出兩條隨機數(shù)并不一致。但是有些時候需要每次啟動游戲或者某個點每次都要產生同樣的隨機數(shù)該如何處理,其實很簡單的。

1.首先需要定義一個System.Random的變量

System.Random random;

2.使用指定的種子值初始化 System.Random 類的新實例,種子的值不能超過int最大值喲,現(xiàn)在以種子=1000

random = new System.Random(1000);

3.產生隨機數(shù)

public int RandomRange(int min, int max)
{
    return random.Next(min, max);
}

調用RandomRange就可以產生真隨機數(shù)了。

2.png

這兩條log是兩次啟動產生的隨機數(shù),哇?。?!產生了同樣的隨機數(shù)。但是產生的隨機數(shù)是整型的,要產生浮點隨機數(shù)的怎么辦?

public float RandomRange(float min, float max)
{
    var r = random.NextDouble();
    return (float)(r * (max - min) + min);
}

浮點數(shù)的也來了。重載了RandomRange方法,是不是很爽啊,啊,啊,?。。?!

現(xiàn)在放出全部的代碼

using UnityEngine;
using UnityEditor;
using NUnit.Framework;

public class TestRandom
{
    System.Random random;
    [Test]
    public void EditorTest()
    {
        //設置隨機數(shù)種子
        random = new System.Random(1000);
        string str = "";
        //for (int i = 0; i < 10; i++)
        //{
        //    str += Random.Range(1, 100) + ",";
        //}
        for (int i = 0; i < 10; i++)
        {
            str += RandomRange(1, 100)+",";
        }
        Debug.Log(str);
    }
    
    /// <summary>
    /// 隨機整型
    /// </summary>
    /// <param name="min"></param>
    /// <param name="max"></param>
    /// <returns></returns>
    public int RandomRange(int min, int max)
    {
        return random.Next(min, max);
    }

    /// <summary>
    /// 隨機浮點數(shù)
    /// </summary>
    /// <param name="min"></param>
    /// <param name="max"></param>
    /// <returns></returns>
    public float RandomRange(float min, float max)
    {
        var r = random.NextDouble();
        return (float)(r * (max - min) + min);
    }

}

注意啊,必須是在同一臺機器才會每次產生同樣的隨機數(shù)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 方法1 (數(shù)據類型)(最小值+Math.random()*(最大值-最小值+1)) 例: (int)(1+Math...
    GB_speak閱讀 41,397評論 2 6
  • 本文根據眾多互聯(lián)網博客內容整理后形成,引用內容的版權歸原始作者所有,僅限于學習研究使用,不得用于任何商業(yè)用途。 隨...
    深紅的眼眸閱讀 2,345評論 0 0
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,623評論 18 399
  • Throwable java中所有異常的父類 派生兩個子類,Error和Exception try-catchtr...
    程序員必修課閱讀 163評論 0 0
  • 電影:小男孩 【美劇】 主演:雅各布.薩爾瓦提 凱文.詹姆斯 類型:喜劇 戰(zhàn)爭 溫情 推薦指數(shù):4顆星 ...
    林森啊閱讀 378評論 0 0

友情鏈接更多精彩內容