当我们在去随机数的时候,如果多个脚本同时取随机数得到的随机数将会是一样的,因为随机数和时间以及种子有关,多个相同的脚本同时取随机数一定是一样的。
解决方式:
? ? ? 寻找唯一标识符,很简单我想到的是通过基地址来达到目的(地址才是真正意义上的唯一标识符),同地址形成随机种子,然后在生成随机数目的达到。
代码如下:
//头文件
using System;
using System.Runtime.InteropServices;
//有一些步骤是可以优化的,介于前面写了部分代码,所以是添加的方式
/// <summary>
/// 获取基地址的
/// </summary>
/// <param name="o"></param>
/// <returns></returns>
public int GetMemory(object o)
{
GCHandle h= GCHandle.Alloc(o, GCHandleType.WeakTrackResurrection);
IntPtr addr = GCHandle.ToIntPtr(h);
return int.Parse( addr.ToString());
}
/// <summary>
/// 产生随机数
/// 调用我就可以产生你要的随机数了,如果有需求可以自己重载
/// </summary>
/// <param name="min">最小值</param>
/// <param name="Max">最大值</param>
/// <returns></returns>
public float GetRadom(int min, int Max)
{
int iSeed = 10;
System.Random rd = new System.Random(GetMemory(iSeed));
return ((float)rd.Next(x*min,Max*x))/x ;
}
时机效果:
|