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