Simple C# script to create self writing text effect in Unity UI.

 

Updated Script:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

// © 2017 TheFlyingKeyboard and released under MIT License
// theflyingkeyboard.net

//Writes text letter by letter with time step

public class SelfWritingText : MonoBehaviour {
    [SerializeField] private Text textToUse;
    [SerializeField] private bool useThisText = false;
    [SerializeField] private bool useThisTextText = false;

    [SerializeField] private float letterPause = 0.1f;

    [TextAreaAttribute(4, 15)]
    [SerializeField] private string textToShow;

    private string message;

    private void Start()
    {
        message = textToShow;

        if (useThisText)
        {
            textToUse = GetComponent<Text>();
        }

        if (useThisTextText)
        {
            message = textToUse.text;
        }

        textToUse.text = "";

        StartCoroutine(TypeText(textToUse, message, letterPause));
    }

    private IEnumerator TypeText(Text text, string textText, float timePause)
    {
        for(int i = 0; i < textText.Length; i++)
        {
            text.text += textText[i];

            yield return 0;
            yield return new WaitForSeconds(timePause);
        }
    }

    public void WriteText(Text newText = null, string newTextToShow = null, float newLetterPause = -1.0f)
    {
        if(newText != null && newTextToShow != null && newLetterPause > 0.0f)
        {
            StartCoroutine(TypeText(newText, newTextToShow, newLetterPause));
            return;
        }

        if(newText!= null && newTextToShow != null)
        {
            StartCoroutine(TypeText(newText, newTextToShow, letterPause));
            return;
        }

        if (newText != null && newLetterPause > 0.0f)
        {
            StartCoroutine(TypeText(newText, message, newLetterPause));
            return;
        }

        if (newTextToShow != null && newLetterPause > 0.0f)
        {
            StartCoroutine(TypeText(textToUse, newTextToShow, newLetterPause));
            return;
        }

        if (newTextToShow != null)
        {
            StartCoroutine(TypeText(textToUse, newTextToShow, letterPause));
            return;
        }

        if (newLetterPause > 0.0f)
        {
            StartCoroutine(TypeText(textToUse, message, letterPause));
            return;
        }
    }
}

 

Old Script:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

// © 2017 TheFlyingKeyboard and released under MIT License
// theflyingkeyboard.net

//Writes text letter by letter with time step

public class SelfWritingText : MonoBehaviour {
    [SerializeField] private Text textToUse;
    [SerializeField] private bool useThisText = false;
    [SerializeField] private bool useThisTextText = false;

    [SerializeField] private float letterPause = 0.1f;

    [TextAreaAttribute(4, 15)]
    [SerializeField] private string textToShow;

    private string message;

    private void Start()
    {
        message = textToShow;

        if (useThisText)
        {
            textToUse = GetComponent<Text>();
        }

        if (useThisTextText)
        {
            message = textToUse.text;
        }

        textToUse.text = "";

        StartCoroutine(TypeText());
    }

    IEnumerator TypeText()
    {
        for(int i = 0; i < message.Length; i++)
        {
            textToUse.text += message[i];

            yield return 0;
            yield return new WaitForSeconds(letterPause);
        }
    }
}

 

Unity UI C# Self Writing Text
Tagged on:         

Leave a Reply

Your email address will not be published. Required fields are marked *

This website stores some user agent data. These data are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to opt-out of any future tracking, a cookie will be set up in your browser to remember this choice for one year. I Agree, Deny
504