一般计算机的随机数都是伪随机数,以一个真随机数(随机数种子)作为初始条件,然后用一定的算法不停迭代产生随机数。Unity产生随机数都是Random.Range
方法产生出伪随机数,每次启动产生的随机数都不一样。
for (int i = 0; i < 10; i++)
{
Debug.Log(Random.Range(1, 100));
}
这两条log是两次启动产生的随机数,可以看出两条随机数并不一致。但是有些时候需要每次启动游戏或者某个点每次都要产生同样的随机数该如何处理,其实很简单的。
1.首先需要定义一个System.Random的变量
System.Random random;
2.使用指定的种子值初始化 System.Random 类的新实例,种子的值不能超过int最大值哟,现在以种子=1000
random = new System.Random(1000);
3.产生随机数
public int RandomRange(int min, int max)
{
return random.Next(min, max);
}
调用RandomRange
就可以产生真随机数了。
这两条log是两次启动产生的随机数,哇!!!产生了同样的随机数。但是产生的随机数是整型的,要产生浮点随机数的怎么办?
public float RandomRange(float min, float max)
{
var r = random.NextDouble();
return (float)(r * (max - min) + min);
}
浮点数的也来了。重载了RandomRange
方法,是不是很爽啊,啊,啊,啊!!!
现在放出全部的代码
using UnityEngine;
using UnityEditor;
using NUnit.Framework;
public class TestRandom
{
System.Random random;
[Test]
public void EditorTest()
{
//设置随机数种子
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>
/// 随机浮点数
/// </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);
}
}
注意啊,必须是在同一台机器才会每次产生同样的随机数。