Описание
Получает или задает полное внутреннее состояние генератора случайных чисел.
Это свойство можно использовать для сохранения и восстановления ранее сохраненного состояния генератора случайных чисел. Обратите внимание, что state
можно сериализовать, так что детерминизм могут быть сохранены между сеансами. Детерминизм — важная черта во многих сценариях, таких как многопользовательские игры, воспроизводимые симуляции и модульное тестирование.
Состояние генератора можно (повторно) инициализировать двумя способами:
- Вызовите InitState с простым целым числом "seed". Это односторонняя операция, и ее нельзя получить.
- Установка состояния с использованием состояния, ранее полученного из этого же свойства. Этот тип не может быть создан пользователем.
В следующем примере показано, как это работает.
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, поскольку внутреннее состояние генератора было восстановлено до того состояния, которое мы сохранили в stateBeforeStep3
. Кроме того, значения из шагов 7 и 8 будут равны значениям из шагов 1 и 2, потому что мы сбрасываем состояние генератора с помощью initialSeed
через InitState, что оставляет генератор в том же состоянии, что и непосредственно перед шагом 1.