c# - C#/Unity:NPC 跳过对话
问题描述
我正在尝试使用对话管理器来处理游戏中的 NPC 语音,但遇到了一些麻烦。
我有两个NPC;如果我只与一个人交谈,它会遍历他们的所有行,没问题(每个 NPC 有五行代码,由 PC 走到他们并按空格键触发)。但是,如果我与 NPC1 交谈,然后与 NPC2 交谈,即使我回到 NPC1,它也只会显示 NPC2 的讲话。
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();
}
}
}
对话管理器.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 交谈,NPC.cs 中的talkTo 翻转,NPC2 的对话开始,NPC1 的对话队列被清除。然后,它只是显示 NPC2 的下一句,无论玩家在哪个对撞机中。我的问题是,我不知道如何解决这个问题。我应该将特定对话存储在特定 NPC 中吗?如果是这样,我该怎么做?
任何和所有的帮助表示赞赏。谢谢!
解决方案
@Eddge 在评论中的回答:
是的,您可以将队列存储在每个 NPC 上,当您与 NP 交谈时让对话系统显示队列中的下一条消息,而不是让 NPC 在对话系统上调用开始,并让对话系统存储其队列NPC发送的对话
谢谢!
推荐阅读
- kotlin - 在当前上下文中如何访问 Kotlin 协程元素?
- python - python中'lambda'表达式的问题
- windows - 如果机器规格发生变化,我们能否预测 Windows 应用程序将如何工作?
- python - Selenium driver.requests.Timeout 在加载超时后不会停止请求
- asp.net-core - MVC Core 中的混合用户身份
- javascript - 使移动视图在 +90 度的横向上保持纵向模式
- javascript - 通过对象数组的 Javascript 映射
- apache - 找不到包 apache2-mpm-worker
- javascript - 为什么我的 JavaScript 中的“keypress”在单击 HTML 按钮后同时表现得像“keypress”和“keyup”?
- php - 在 laravel 7.1 的活动日志中找不到类“Spatie\Activitylog\ActivitylogFacade”