• Unity如何生成随机数(设置种子)


    随机类

    我们可以使用Random类来生成一些随机数
    Random类是用于生成随机数的类之一。它可以用于生成不同类型的随机数,如整数、浮点数和向量。

    整数

    我们可以使用Random.Range来生成指定范围内的随机整数或浮点数。下面举两个例子:

            // 随机生成一个浮点数
            float randomNumber = Random.Range(0f, 1f);
            Debug.Log("随机float: " + randomNumber);
    
            // 随机生成一个整数
            int randomInt = Random.Range(1, 10);
            Debug.Log("随机int: " + randomInt);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行结果如下所示:
    在这里插入图片描述

    二维向量

    使用Random.insideUnitCircle来获取一个单位圆内的随机二维向量。这个方法通常用于生成随机位置。代码如下所示:

            // 随机生成一个二维向量
            Vector2 randomVector2 = Random.insideUnitCircle;
            Debug.Log("随机Vector2: " + randomVector2);
    
    • 1
    • 2
    • 3

    运行结果如下所示:
    在这里插入图片描述

    三维向量

    使用Random.insideUnitSphere获取一个单位球体内的随机三维向量。这个方法常用于生成随机方向和运动效果。

            // 随机生成一个三维向量
            Vector3 randomVector3 = Random.insideUnitSphere;
            Debug.Log("随机Vector3: " + randomVector3);
    
    • 1
    • 2
    • 3

    运行结果如下所示:
    在这里插入图片描述

    种子

    如果有人玩过我的世界,可能会知道种子这个东西,我们在玩我的世界的时候,都知道地图是随机生成的,但是也知道,同一个种子会生成相同的地图,这是为什么呢?其实随机数生成是基于种子的计算,相同的种子将产生相同的随机序列。

    Unity中的随机数生成也是基于伪随机数算法,也就是说,它们实际上是根据种子计算出来的确定性结果。这意味着相同的种子将始终生成相同的随机序列。

    默认情况下,Random类的种子是基于系统时间的,但你也可以使用Random.InitState方法自定义设置种子。这个方法接受一个整数作为参数,用于初始化随机数生成器的种子。

        	public int seed = 12345;  // 自定义的种子值
            Random.InitState(seed);  // 设置种子
            // 根据自定义种子生成随机数
            float randomNum = Random.Range(0f, 1f);
            int randomInt = Random.Range(1, 10);
            Vector3 randomVector = Random.insideUnitSphere;
    
            Debug.Log("随机float: " + randomNum);
            Debug.Log("随机int: " + randomInt);
            Debug.Log("随机Vector: " + randomVector);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在上述示例中,我们首先定义了一个整数变量seed,用于存储自定义的种子值。然后,我们使用Random.InitState(seed)来设置种子。接下来,我们使用Random类的其他方法如Random.Range和Random.insideUnitSphere生成基于自定义种子的随机数。

    多次运行,都会得到同样的结果:
    在这里插入图片描述
    通过自定义设置种子,你可以确保在相同的种子值下生成相同的随机序列。这在需要重现特定随机序列的情况下非常有用。但也需要注意,这可能导致一些问题,如随机事件的预见性或随机生成物体布局的重复性。因此,要根据你的项目需求,做好选择。

    其他文章

    Unity实现角色受到攻击后屏幕抖动的效果
    Unity实现2D游戏跟随摄像机(平滑移动)

  • 相关阅读:
    vscode json 无决找到“e:\...“
    反射工具类 guava Apache spring
    载羟基喜树碱-聚乳酸纳米粒|平均粒径为85nm的葫芦素BE聚乳酸纳米微粒(CuBE- PLA-NP)技术资料
    【打工日常】解决docker对镜像pull的很慢的问题
    golang关于数量的总结
    开源的轻量级任务调度框架
    力扣每日一题66:加一
    Mac磁盘空间满了怎么办?Mac如何清理磁盘空间
    Spring Boot集成ElasticsearchRepository
    一百九十五、MySQL——MySQL数据库创建只读权限的账号(附流程截图)
  • 原文地址:https://blog.csdn.net/weixin_44499065/article/details/133393696