Il ne me semble pas avoir trouvé de script dans ce style déjà posté. (Faut dire que chercher dans le forum avec les termes "lettre par lettre", j'avais le choix niveau résultat)
Donc un script assez basique qui affiche une lettre après l'autre le texte d'un component UIText. Normalement il ne reste que l'essentiel, c'est une version allégée du modèle que j'utilise pour l'affichage de mes dialogues donc j'ai passé un coup de savon sur le superflu.
Il suffit simplement de le glisser sur un UIText et il fait son travail tout seul. (la variable de vitesse est private, libre à vous de l'afficher sur l'inspecteur). De même, une fois que le texte est chargé entièrement et qu'un nouveau texte le remplace, il le mettra à jour automatiquement en affichant le tout lettre par lettre.
Améliorable selon les besoins mais dans l'état, fait son travail.
Code : Tout sélectionner
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(Text))]
public class LoadText : MonoBehaviour
{
private Text uiText;
private float showSpeed = 0.05f;
private string showText, uiTextCopy;
private bool coroutineProtect, loadText;
private void Start()
{
uiText = GetComponent<Text>();
TextInformations();
}
private void OnEnable() { uiTextCopy = null; }
private void Update()
{
if (loadText && !coroutineProtect)
{
StartCoroutine(LoadLetters(uiTextCopy));
coroutineProtect = true;
}
else if (loadText && coroutineProtect) { uiText.text = showText; }
else if (!loadText && !coroutineProtect)
{
if (uiText.text != uiTextCopy) { TextInformations(); }
}
}
private void TextInformations()
{
uiTextCopy = uiText.text;
showText = null;
uiText.text = null;
loadText = true;
coroutineProtect = false;
}
private IEnumerator LoadLetters(string completeText)
{
int textSize = 0;
while (textSize < completeText.Length)
{
showText += completeText[textSize++];
yield return new WaitForSeconds(showSpeed);
}
coroutineProtect = false;
loadText = false;
}
}
Edit : Petit ajout de la fonction OnEnable() pour remettre à zéro uiTextCopy afin que si un texte est relancé (donc le même string qu'avant) il recharge correctement lettre par lettre le tout.