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);

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

二维向量

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

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

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

三维向量

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

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

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

种子

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

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);

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

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

其他文章

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

猜你喜欢

转载自blog.csdn.net/weixin_44499065/article/details/133393696