Создаю эффект печатания текста. Суть такая: Есть набор рандомных символов в string, string с нужным текстом и две переменные SpeedChanging (скорость смены рандомного текста), SpeedToSet(скорость установки символа из требуемой строки). Нужно, чтобы со скоростью speedChanging рандомный текст заново генерировался, а со скоростью SpeedToSet устанавливался требуемый текст из NeedText слева направо.
Например:
needText = "Нужный текст"
Первое прохождение:
string result = akfgmassnvkczxvxzklc
Второе прохождение:
string result =
Нfasdkmfgkvmxzckvvcs
Третье прохождение:
string result =
Нуvbxcl,b;vxcmbmxcvsa
Четвертое прохождение:
string result =
Нужvbxcl,b;vxcmbmxcvs
и так далее.
Вот как я пытаюсь это сделать:
[SerializeField]
private Text mainText;
[SerializeField]
private string needText;
private const string chars = "QqWwEeRrTtYyUuIiOoPpAaSsDdFfGgHhJjKkLlZzXxCcVvBbNnMmЙйЦцУуКкЕеНнГгШшЩщЗзХхЪъФфЫыВвАаПпРрОоЛлДдЖжЭэЯяЧчМмИиТтЬьБбЮю,.?/|\';:]{}[123456789+-*ҐґЄЇїє";
[SerializeField]
private int lenght;
[SerializeField]
private float speedChanging;
[SerializeField]
private float speedToSet;
private void Start()
{
//mainText.text = GenerateRandom(lenght);
StartCoroutine(GenerateString());
}
private string GenerateRandom(int lenght)
{
Random random = new Random();
string result = "";
for (int i = 0; i < this.lenght; i++)
{
result += chars[Random.Range(0, chars.Length)];
}
return result;
}
IEnumerator GenerateString()
{
for (int i = 0; i < needText.Length; i++)
{
mainText.text += needText[i];//генерирую нужный символ
for (int j = i; j < needText.Length; j++)
{
mainText.text = mainText.text.Insert(j, "");//удаляю все что не нужно
}
mainText.text += GenerateRandom(needText.Length-i);// вставляю рандомные символы за нужными символами
yield return new WaitForSeconds(speedChanging);
}
}
Но при запуске появляется ошибка -
ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: startIndex
При клики на неё - она не указывает на место в коде, откуда она появляется.