Pickto
@Pickto

Побуквенное печатонье текста в Unity и UI?

Как с помощью корутин сделать побуквенный вывод текста на экране UI.
Вот код, но в нем ошибка, не могу понять как исправить
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class dialog : MonoBehaviour {
	public bool skipText;
	private bool isPrint;
	public static string textMess;

	public GameObject dialogField;


	// Use this for initialization
	void Start () {
		StartCoroutine(TextPrint(dialogField.GetComponent<Text>().text, textMess, 0.1f, skipText));
		isPrint = false;
	}
	
	// Update is called once per frame
	void Update () {
		
		
	}

		
	IEnumerator TextPrint(string output, string input, float delay, bool skip)
	{
 		if (isPrint) yield break;
 		isPrint = true;
		//вывод текста побуквенно
 		for (int i=1; i<=input.Length; i++) {
  			if (skip) { output = input; break; }
  		output = input.Substring(1, i);
  		yield return new WaitForSeconds(delay);
 		}
 	}
 	

}
  • Вопрос задан
  • 2287 просмотров
Решения вопроса 1
@Pparma
У вас новая корутина запускается на каждом апдейте и каждая начинает выводить текст. Как минимум уберите isPrint = false из апдейта. А ещё лучше поменяйте логику чтоб не запускать корутину в каждом апдейте.

StartCoroutine(TextPrint(dialogField.GetComponent<Text>(), textMess, 0.1f, skipText));

IEnumerator TextPrint(Text output, string input, float delay, bool skip)
{ 
...
output.text = input.Substring(0, i);
...
}


К стати у стринга индексы начинаются с нуля, а не с единицы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы