Unity3D利用随机数种子每次产生同样的随机数

一般计算机的随机数都是伪随机数,以一个真随机数(随机数种子)作为初始条件,然后用一定的算法不停迭代产生随机数。Unity产生随机数都是Random.Range方法产生出伪随机数,每次启动产生的随机数都不一样。

for (int i = 0; i < 10; i++)
{
    Debug.Log(Random.Range(1, 100));
}
1.png

这两条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就可以产生真随机数了。

2.png

这两条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);
    }

}

注意啊,必须是在同一台机器才会每次产生同样的随机数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 方法1 (数据类型)(最小值+Math.random()*(最大值-最小值+1)) 例: (int)(1+Math...
    GB_speak阅读 41,264评论 2 6
  • 本文根据众多互联网博客内容整理后形成,引用内容的版权归原始作者所有,仅限于学习研究使用,不得用于任何商业用途。 随...
    深红的眼眸阅读 2,277评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,803评论 18 399
  • Throwable java中所有异常的父类 派生两个子类,Error和Exception try-catchtr...
    程序员必修课阅读 145评论 0 0
  • 电影:小男孩 【美剧】 主演:雅各布.萨尔瓦提 凯文.詹姆斯 类型:喜剧 战争 温情 推荐指数:4颗星 ...
    林森啊阅读 334评论 0 0