一般計算機的隨機數(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ù)。