Диалог Brackeys без кнопки «Пуск» (Unity) - PullRequest
0 голосов
/ 01 февраля 2019

Я следовал Руководству по Brackeys для диалоговой системы, но я не хочу, чтобы кнопка «Пуск» в Unity, текст должен начинаться один.Кто-нибудь может мне помочь со сценарием?Я пробовал несколько часов, но у меня не получается.

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

    public class DialogTrigger : MonoBehaviour
    {

        public Dialog dialog;

        public void TriggerDialogue()
        {
            FindObjectOfType<DialogManager>().StartDialog(dialog);
        }

    }

Цитата

using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    using UnityEngine.SceneManagement;
    public class DialogManager : MonoBehaviour
    {
        public float delay;
        public Text nameText;
        public Text dialogueText;



        private Queue<string> sentences;

        // Use this for initialization
        void Start()
        {
            sentences = new Queue<string>();
        }

        public void StartDialog(Dialog dialog)
        {


            nameText.text = dialog.name;

            sentences.Clear();

            foreach (string sentence in dialog.sentences)
            {
                sentences.Enqueue(sentence);
            }

            DisplayNextSentence();
        }

        public void DisplayNextSentence()
        {
            if (sentences.Count == 0)
            {
                EndDialogue();
                return;
            }

            string sentence = sentences.Dequeue();
            StopAllCoroutines();
            StartCoroutine(TypeSentence(sentence));
        }

        IEnumerator TypeSentence(string sentence)
        {
            dialogueText.text = "";
            foreach (char letter in sentence.ToCharArray())
            {
                dialogueText.text += letter;
                yield return new WaitForSeconds(delay);
            }
        }

        void EndDialogue()
        {
            SceneManager.LoadScene(1);
        }

    }

Я нашел комментарий для записив пустом старте, но это не работает, и с коллайдером это также не работает.

1 Ответ

0 голосов
/ 01 февраля 2019

DialogueManager должен установить Queue в Awake() intsead из Start():

public class DialogManager : MonoBehaviour
{
    private void Awake()
    {
        sentences = new Queue<string>();
    }

Тогда DialogTrigger может безопасно позвонить TriggerDialogue() со своего Start():

public class DialogTrigger : MonoBehaviour
{
    private void Start()
    {
        TriggerDialogue();
    }

Когда сцена загружается, все сценарии запускают свой метод Awake() (если он есть), тогда все включенные сценарии запускают свой метод Start().


Вы также можете выбратьчтобы инициализировать Queue в той же строке, вы объявляете это:

public class DialogManager : MonoBehaviour
{
    private Queue<string> sentences = new Queue<string>();

Тогда этому классу не нужен метод Awake() или Start(), и DialogTrigger всегда безопасно вызывать его.

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