Звучит так, как будто DialogueManager.StartDialogue
, вероятно, через DialogueStart.TriggerDialogue
вызывается откуда-то из Awake
или, по крайней мере, до того, как ваш Start
был выполнен.
Особенно
DialogueManager.SetActive(true);
давайте предположим, что объект DialogueManager
сначала неактивен. Поэтому, возможно, ваш материал вызывается до того, как он становится активным.
Это также может быть связано с Start
, где вы устанавливаете
InteractionNPCNameTextField.gameObject.SetActive(false);
, поэтому любой компонент на этом GameObject
может не вызывается метод Start
. Может быть, вы указали неправильный GameObject
здесь?
Отладка поможет выяснить, в каком порядке будут вызываться ваши методы.
В общем, мое правило большого пальца для инициализации:
- Делайте все, что зависит только от вас самих, в
Awake
- Делайте все, что зависит от настроек других компонентов, уже в
Start
Это Таким образом, вы можете (почти) всегда быть уверены, что материал уже инициализирован, когда вам это нужно.
Однако это только догадки, но
Простое решение здесь:
Вы уже могли решить эту проблему, просто инициализировав sentences
сразу, используя
private readonly Queue<string> sentences = new Queue<string>();
, теперь он определенно инициализируется даже до того, как Start
или Awake
будут вызваны!