Unity并发取随机导致相同解决方法(同一时间随机数不同)

当我们在去随机数的时候,如果多个脚本同时取随机数得到的随机数将会是一样的,因为随机数和时间以及种子有关,多个相同的脚本同时取随机数一定是一样的。

解决方式:

      寻找唯一标识符,很简单我想到的是通过基地址来达到目的(地址才是真正意义上的唯一标识符),同地址形成随机种子,然后在生成随机数目的达到。

代码如下:

//头文件
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 ;
    }

时机效果:

猜你喜欢

转载自blog.csdn.net/fairen/article/details/118421549