Текст буква за буквой GO - PullRequest
       4

Текст буква за буквой GO

0 голосов
/ 05 апреля 2020

Я играю в игру «Единство», и я хотел бы показывать текст на панели буква за буквой (например, если кто-то печатал).

Я уже посмотрел несколько вещей (сопрограммы, IEnumerator ), но не выяснил, как это сделать.

Мой GO - это префаб, который я создаю. Я не создаю экземпляр в окне Scene, все экземпляры выполняются в коде. И это не класс MonoBehaviour.

Это префаб, который я создаю:

    InteractionIntro = Instantiate(Resources.Load("Prefab/Play/Interaction") as GameObject);
    InteractionIntro.transform.SetParent(canvasGameObject.transform, false);
    InteractionIntro.transform.localPosition = new Vector3(0, 200, 0);
    public void SetInteractionText(string text)
    {
        InteractionIntro.GetComponentInChildren<Text>().text = text;
    }

Иерархия выглядит следующим образом:

enter image description here

Поэтому мне бы хотелось, чтобы компонент «Текст» имел буквенно-буквенный эффект.

Есть идеи, как решить эту проблему?

@ ОБНОВЛЕНИЕ Может быть, добавив сценарий в мой сборный? @ UPDATE: я прочитал текст, который отображается из файла.

@ EDIT: поэтому я создал скрипт. Вот мой код:

public class TypingEffect : MonoBehaviour
{
    public GameObject GO;   

    public float delay = 0.1f;
    public string fullText;
    private string currentText = "";

    // Use this for initialization
    void Start () {
        StartCoroutine(ShowText());
    }

    IEnumerator ShowText(){
        for(int i = 0; i <= fullText.Length; i++){
            currentText = fullText.Substring(0,i);
            GO.GetComponent<Text>().text = currentText;
            yield return new WaitForSeconds(delay);
        }
    }
}

Работает. Текст отображается буква за буквой. Но это текст, который я написал в инспекторе: enter image description here

Как связать текст с методом setInteractionText ?

@ UPDATE: удалось чтобы сделать это, но он только записывает построчный первый текст, если я отображаю второй текст, он больше не работает. может быть сброс?

1 Ответ

0 голосов
/ 06 апреля 2020

Я решил это с помощью отдельного скрипта.

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

public class TypingEffect : MonoBehaviour
{
    public GameObject GO;   

    public float delay = 0.05f;
    private string fullText;
    private string currentText = "";

    // Use this for initialization
    void Start () {

        StartCoroutine(ShowText());
    }

    void Update()
    {

    }


    IEnumerator ShowText()
    {
        currentText="";


        for(int i = 0; i <= fullText.Length; i++){
            currentText = fullText.Substring(0,i);
            GO.GetComponent<Text>().text = currentText;
            yield return new WaitForSeconds(delay);
        }


    }

    public void setText(string text)
    {
        this.fullText = text;
        StartCoroutine(ShowText());

    }
}

Метод setText вызывается в другом классе каждый раз, когда мне нужно установить другой текст. Важно не забыть снова вызвать StartCoroutine.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...