Я пытаюсь использовать Менеджер диалогов для обработки речи NPC в моей игре, и у меня возникают некоторые проблемы.
У меня есть два NPC;если я разговариваю только с одним, он пройдет все их строки, без проблем (у каждого NPC есть пять строк кода, которые запускаются ПК, который подходит к ним и нажимает пробел).Однако, если я поговорю с NPC1, а затем с NPC2, он будет отображать только речь NPC2, даже если я вернусь к NPC1.
NPC.cs
public class NPC : Character {
private bool charInRange;
public Dialogue dialogue;
public bool talkedTo = false;
// Use this for initialization
void Start () {
charInRange = false;
}
// Update is called once per frame
void Update () {
//if player is in range and presses space, triggers NPC dialogue
if (charInRange && Input.GetKeyDown(KeyCode.Space))
{
TriggerDialogue();
}
}
//if Player gameObject is in NPC collider, player is in range
void OnTriggerEnter2D(Collider2D other)
{
if(other.gameObject.tag == "Player")
{
charInRange = true;
}
}
//if player exits NPC collider, player is not in range
void OnTriggerExit2D(Collider2D other)
{
if (other.gameObject.tag == "Player")
{
charInRange = false;
}
}
//if NPC has been talked to before, displays next sentence; if not, loads dialogue and displays first sentence
private void TriggerDialogue()
{
if (!talkedTo)
{
talkedTo = true;
FindObjectOfType<DialogueManager>().StartDialogue(dialogue);
}
else
{
FindObjectOfType<DialogueManager>().DisplayNextSentence();
}
}
}
DialogueManager.cs
public class DialogueManager : MonoBehaviour {
private Queue<string> sentences;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
//loads a queue with lines from Dialogue and displays first sentence
public void StartDialogue(Dialogue dialogue)
{
sentences = new Queue<string>();
foreach (string sentence in dialogue.sentences)
{
sentences.Enqueue(sentence);
}
DisplayNextSentence();
}
//displays next sentence in the queue
public void DisplayNextSentence()
{
Debug.Log(sentences.Count);
//if no more sentences in the queue, end the dialogue
if(sentences.Count == 0)
{
EndDialogue();
return;
}
string sentence = sentences.Dequeue();
Debug.Log(sentence);
}
//ends dialogue
private void EndDialogue()
{
Debug.Log("CONVERSATION OVER");
}
}
Я знаю, в чем проблема: после разговора с NPC2, talkedTo в NPC.cs переворачивается, начинается диалог NPC2, и очередь диалога NPC1 стирается.Затем он просто отображает следующее предложение NPC2, независимо от того, в каком коллайдере находится игрок. Моя проблема в том, что я не уверен, как решить эту проблему.Должен ли я хранить конкретный диалог в конкретных NPC?Если да, то как мне это сделать?
Любая и вся помощь приветствуется.Спасибо!