Unity 6.3
0 онлайн 83 гостей 3 в системе
Вход

Random.state

Declaration

public static Random.State state;

Описание

Возвращает или задаёт полное внутреннее состояние генератора случайных чисел.

Это свойство можно использовать, чтобы сохранить и восстановить ранее сохранённое состояние генератора случайных чисел. Обратите внимание, что state является серийным, так что детерминизм Детерминизм является важной особенностью во многих сценариях, таких как многопользовательские игры, воспроизводимые симуляции и тестирование модулей.

Состояние генератора можно (пере)инициализировать двумя способами:

  1. Вызов InitState с простым целым числом "seed". Это односторонняя операция и не может быть получена.
  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.