美文网首页首页投稿(暂停使用,暂停投稿)
Unity3D利用随机数种子每次产生同样的随机数

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

作者: 微巴特 | 来源:发表于2017-07-15 10:12 被阅读0次

    一般计算机的随机数都是伪随机数,以一个真随机数(随机数种子)作为初始条件,然后用一定的算法不停迭代产生随机数。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);
        }
    
    }
    

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

    相关文章

      网友评论

        本文标题:Unity3D利用随机数种子每次产生同样的随机数

        本文链接:https://www.haomeiwen.com/subject/dhuahxtx.html