Диалоговые окна Unity - PullRequest
       5

Диалоговые окна Unity

0 голосов
/ 05 декабря 2018

Я пытаюсь создать диалог, в котором диалог останавливается с заданным счетом, а затем продолжается после определенного события.Сначала я установил количество предложений на 6, и мне удалось остановить разговор после 3-го предложения

 by setting the if statement in DisplayNextSentence() to ==> [sentence.Count == 3]

и заставить игрока сделать что-то еще, но я не знаю, как сделатьNPC продолжают диалог после завершения этого определенного события.

Не могли бы вы рассказать мне, как это сделать?Я действительно смотрел видео на YouTube, но эти видео либо смутили меня, либо не объяснили, как эта часть работает подробно, но я обнаружил, что этот метод как-то легче понять в моем случае.

container

[System.Serializable]
public class Dialogue {

//name of npc
public string name;

//sentences of the npc
[TextArea(3,10)]
public string[] sentences;
}

другой класс

public class DialogueTrigger : MonoBehaviour {

//calls the Dialogue class 
public Dialogue dialogue;

//triggers the dialouge
public void TriggerDialogue()
{
    FindObjectOfType<DialogueManager>().StartDialogue(dialogue);
}
}

менеджер

public class DialogueManager : MonoBehaviour {

private Queue<string> sentences;

public Text NPC_nameText;
public Text NPC_DialogueText;

void Start () {
    sentences = new Queue<string>(); 
}

public void StartDialogue(Dialogue dialogue)
{
    //Changes the name of the Name Text to given name
    NPC_nameText.text = dialogue.name;

    sentences.Clear();

    //goes through the whole array of sentences
    foreach(string sentence in dialogue.sentences)
    {
        sentences.Enqueue(sentence);
    }

    //displays the sentences
    DisplayNextSentence();
}

public void DisplayNextSentence()
{
    //condition if array sentence is finished looping
    if (sentences.Count == 0)
    {
        //ends dialogue and goes to the next UI
        EndDialogue();
        return;
    }   

    //Sentence appears in queue waiting for each sentence to finish
    string sentence = sentences.Dequeue();
    StopAllCoroutines();

    StartCoroutine(TypeSentence(sentence));
}

void EndDialogue()
{
    Debug.Log("End of Conversation");
}

IEnumerator TypeSentence(string sentence)
{
    //types the characters for each sentence
    NPC_DialogueText.text = "";
    foreach (char letter in sentence.ToCharArray())
    {
        NPC_DialogueText.text += letter;
        yield return null;
    }
}

}

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