版本:Unity 6 (6000.0)
语言英语
  • C#

Random.state

建议更改

成功!

感谢您帮助我们改进 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读来自用户的所有建议的更改,并在适用时进行更新。

关闭

提交失败

由于某些原因,无法提交您建议的更改。请在几分钟后再<a>尝试</a>。谢谢您花时间帮助我们改进 Unity 文档的质量。

关闭

取消

切换到手册
public static Random.State state;

说明

获取或设置随机数生成器的完整内部状态。

可以使用此属性来保存和恢复随机数生成器之前保存的状态。注意,state 是可序列化的,因此可以跨会话保留确定性。确定性是许多场景中的重要特征,例如多人游戏、可重复的模拟和单元测试。

生成器状态可以通过两种方式(重新)初始化

  1. 使用简单的整数“种子”调用 InitState。这是一次性操作,且无法检索。
  2. 使用从同一属性中以前检索的 State 设置 state。用户无法构造这种类型。

有关这些如何工作的说明,请参阅以下示例。

using UnityEngine;

public class ExampleClass : MonoBehaviour { void Start() { const int initialSeed = 1234;

Random.InitState(initialSeed); // cannot be retrieved

PrintRandom("Step 1"); PrintRandom("Step 2");

Random.State stateBeforeStep3 = Random.state; // can be serialized

PrintRandom("Step 3"); PrintRandom("Step 4");

Random.state = stateBeforeStep3;

PrintRandom("Step 5"); PrintRandom("Step 6");

Random.InitState(initialSeed);

PrintRandom("Step 7"); PrintRandom("Step 8"); }

static void PrintRandom(string label) => Debug.Log($"{label} - RandomValue {Random.Range(0, 100)}"); }

/* Output:

Step 1 - RandomValue 38 Step 2 - RandomValue 76 Step 3 - RandomValue 69 Step 4 - RandomValue 11 Step 5 - RandomValue 69 Step 6 - RandomValue 11 Step 7 - RandomValue 38 Step 8 - RandomValue 76 */

步骤 5 和 6 的值将与步骤 3 和 4 的值相等,因为生成器的内部 state 已恢复到我们在 stateBeforeStep3 中保存的值。此外,步骤 7 和 8 的值将与步骤 1 和 2 的值相等,因为我们正在使用 initialSeed 通过 InitState 重置生成器状态,这使得生成器处于与步骤 1 之前完全相同的状态。