@ellz

Проблема с созданием эффекта печатания текста?

Создаю эффект печатания текста. Суть такая: Есть набор рандомных символов в 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

При клики на неё - она не указывает на место в коде, откуда она появляется.
  • Вопрос задан
  • 169 просмотров
Решения вопроса 1
GavriKos
@GavriKos Куратор тега Unity
ArgumentOutOfRangeException
startIndex is negative or greater than the length of this instance.

Вот отсюда - https://docs.microsoft.com/en-us/dotnet/api/system...
Чтобы вставить в позицию j (которая на первой итерации внешнего цикла будет от 0 до needText.Length) в строке maintext.Text уже должно быть достаточное количество символов - т.е. needText.Length.
Более того - вставка пустой строки не имеет смысла. Удаляйте через substring, например.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы