C # / Unity: NPC, пропускающие линии диалога - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь использовать Менеджер диалогов для обработки речи 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?Если да, то как мне это сделать?

Любая и вся помощь приветствуется.Спасибо!

1 Ответ

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

Ответ @Eddge в комментариях:

да, вы можете хранить очередь на каждом NPC, и просто попросите систему Диалога показать следующее сообщение в очереди, когда вы вместо этого общаетесь с NP.чтобы NPC вызывал старт в системе Dialogue, и чтобы система диалогов сохраняла свою очередь диалогов, отправленных NPC

Спасибо!

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