随手记3:C#Unity中随机数的使用

问题:在同时引用UnityEngine和System命名空间时【using UnityEngine(继承MonoBehaviour类+)+using System(用到了浮点数转字符串的Convert函数)】,如果直接Random.Range(float1float2)会出现“Random”是“UnityEngine.Random”和“System.Random”之间的不明确的引用的报错

解决方法:在前面加上到底使用哪个Random,即UnityEngine.Random.Range(float1float2)或者先System.Random r = new System.Random(); 再调用r.Next(int1,int2);

注:System.Random需要实例化才能随机,而UnityEngine.Random是直接使用。

Random.Range以及Random.value,前者是方法,后者是变量

补充:除了需要随机数之外,可能会有保留上次随机结果的需求,换句话说,从某一时刻起,我们希望每次都能随机出和上次相同的结果,这个时候就该随机种子出场了。

随机种子就是一个种子对应着一个结果,随机种子对应的就是一个唯一的随机结果。

  • 在使用UnityEngine库时

seed = PlayerPrefs.GetInt("Seed");

//修改种子数,用到System.DateTime.Now.Ticks来保证得到和上次的种子绝不相同的整型

PlayerPrefs.SetInt("Seed", (int)System.DateTime.Now.Ticks);

//每次随机生成不同的序列

Random.Range(int1,int2 );

用法:在某次发现了随机产生的其他Bug,这样我只要我只用启动Debug模式反复分析几遍后把复现的隐藏Bug修改结束后再回到正常模式产生新的随机数就好。

(以是否开启启动Debug模式作为判断,若开启则seed = PlayerPrefs.GetInt("Seed")数据不变,关闭Debug模式时PlayerPrefs.SetInt("Seed", (int)System.DateTime.Now.Ticks)数据改变)

  • 在使用UnityEngine库时

一个构造方法带有随机种子的参数,一个则没有,原理和上面是一样的:

public Random();

public Random(int Seed);

猜你喜欢

转载自blog.csdn.net/lhongj666/article/details/124806756