Page 1 sur 1

[C#] Affichage d'un texte lettre par lettre

Publié : 21 Mai 2017 08:28
par Nazarick
Hi,

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;
    }

}
PS : Stef ce serait possible d'avoir de véritable balise code à l'occasion ? Même en utilisant [ code = php] (sans espace hein) n'avoir que le vert ou le bleu, ça fait mal aux yeux ;)

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.

Re: [C#] Affichage d'un texte lettre par lettre

Publié : 21 Mai 2017 10:48
par Max
merci pour le partage ;)
Nazarick a écrit :PS : Stef ce serait possible d'avoir de véritable balise code à l'occasion ? Même en utilisant [ code = php] (sans espace hein) n'avoir que le vert ou le bleu, ça fait mal aux yeux ;)
je me permet de répondre. Avec Stef nous avons essayé plusieurs solutions pour avoir une coloration syntaxique des codes, on s'est bien pris la tête avec ça d'ailleurs. Mais entre celles qui sont bugguées et celles qui sont incompatibles avec le thème actuel, en final pour l'heure nous sommes dans l’impasse (comme toujours, si quelqu'un à d'autres tuyaux, nous sommes bien sûr preneur).

Re: [C#] Affichage d'un texte lettre par lettre

Publié : 21 Mai 2017 10:58
par Nazarick
Max a écrit :merci pour le partage ;)
Nazarick a écrit :PS : Stef ce serait possible d'avoir de véritable balise code à l'occasion ? Même en utilisant [ code = php] (sans espace hein) n'avoir que le vert ou le bleu, ça fait mal aux yeux ;)
je me permet de répondre. Avec Stef nous avons essayé plusieurs solutions pour avoir une coloration syntaxique des codes, on s'est bien pris la tête avec ça d'ailleurs. Mais entre celles qui sont bugguées et celles qui sont incompatibles avec le thème actuel, en final pour l'heure nous sommes dans l’impasse (comme toujours, si quelqu'un à d'autres tuyaux, nous sommes bien sûr preneur).
De rien ;)

Pour la coloration syntaxique pas de problème je peux comprendre. Je regarderais à l'occasion si je trouve quelques plugin pour phpbb qui pourrait être intéressant (et si pas déjà essayé par le passé).