В Unity (C#) не меняются значения локальных переменных
Юнити, C#. Заранее извиняюсь за долгие пояснения.
Итак, у меня в юнити есть 2 скрипта: первый печатает заданный текст посимвольно, второй - менеджер, вызывает методы из первого скрипта. Файлы, с которых я читаю текст, есть двух типов: скажем, тип А и тип В. Разные типы записываются в разные текстовые области.

Соответственно, для каждого типа файла у меня свой метод вызова анимации текста. Все они вызываются в Update по нажатию клавиш.
Метод для типа А:
public void LetterText()
{
if (textWriter.isActiveWriter()) //скипать анимацию по нажатию
{
textWriter.WriteAll();
}
else if (!textWriter.isActiveWriter()) //вызов анимации текста и получение следующего файла
{
if (!getState.isEndState) //если не конечный файл и наборе
{
getState = getState.GetNextState()[0]; //меняем нынешний файл на следующий
if (!getState.isCC) //если типа А
{
textWriter.AddWriter(otherManagerForLetter, otherManagerForLetter.text+getState.GetFraseText(), 0.03f, true, otherManagerForLetter.text.Length); //otherManagerForLetter - область для текста типа А
}
else
{
textWriter.AddWriter(text, getState.GetFraseText(), 0.03f, true); //text - область для текста типа В
}
}
else if (getState.isEndState)
{
//вызываем следующую сцену
}
}
}
Метод для типа В (почти идентичен):
public void LetterTextForCC()
{
if (textWriter.isActiveWriter()) //скипать анимацию
{
textWriter.WriteAll();
}
else if (!textWriter.isActiveWriter()) //вызов анимации текста и получение следующего файла
{
if (!getState.isEndState)
{
getState = getState.GetNextState()[0];
if (getState.isCC)
{
textWriter.AddWriter(text, getState.GetFraseText(), 0.03f, true);
}
else
{
DialogueBoxToDisableForLetter.SetActive(false);
textWriter.AddWriter(otherManagerForLetter, otherManagerForLetter.text + getState.GetFraseText(), 0.03f, true, otherManagerForLetter.text.Length);
}
}
else if (getState.isEndState)
{
//вызываем следующую сцену
}
}
}
Итак, оба этих метода вызывают следующий из другого скрипта, где он меняет значения локальный переменных:
public void AddWriter(TextMeshProUGUI uiText, string textToWrite, float timePerCharacter, bool invisibleCharacters, int characterToStart = 0) //задаем новые параметры
{
this.uiText = uiText; //Текстовое поле, с которым работает код
this.textToWrite = textToWrite; //текст для написания
this.timePerCharacter = timePerCharacter; //скорость
this.invisibleCharacters = invisibleCharacters; //скрывать ли ненаписанные символы
characterIndex = characterToStart; //С какого символа начнется отображение
}
Изменив значения, Update выполняет всю работу по отображению символов следующим образом:
public void Update()
{
if (uiText != null) //если есть текст для написания
{
timer -= Time.deltaTime;
while (timer <=0)
{
timer += timePerCharacter;
characterIndex++;
string text = textToWrite.Substring(0, characterIndex);//забираем символ
if (invisibleCharacters)
{
text += "<color=#00000000>" + textToWrite.Substring(characterIndex) + "</color>"; //делаем остальные симфоолы невидымыми
}
uiText.text = text;
if (characterIndex>= textToWrite.Length) //если символы кончились
{
FindObjectOfType<textManager>().textWritingSFX.Stop();
uiText = null;
return;
}
}
}
}
А теперь к проблеме:
Код работает прекрасно во всех случаях, кроме двух: когда происходит первый вызов метода сразу по запуску сцены и когда вызывается из метода для типа А (который писала выше).
При начале я из Start вызываю следующий метод:
public void CallFirstStateForLetter()
{
textWriter.AddWriter(otherManagerForLetter, getState.GetFraseText(), 0.03f, true);
}
Проверяя значения переменных, я пришла к выводу, что в двух данных ситуациях функция AddWriter выполняется, но далее в Update значения всех переменных из нее просто null, почему и не проходят проверку и код не выполняется. Я не могу понять, почему, собственно, в AddWriter не меняются значения конкретно в данных случаях, хотя во всех остальных - меняяются корректно. Может кто-нибудь увидит ошибку?