【问题标题】:How to stop the dialogue from returning to the beginning?如何阻止对话回到开头?
【发布时间】:2022-01-14 15:33:51
【问题描述】:

当玩家与对象碰撞并使用“E”按钮检查它时触发我的对话。但是,当对话播放时,玩家仍然可以按下按钮,对话从头开始。如何在对话期间禁用用户输入或阻止它返回到第一句话?先感谢您! 这就是对话的触发方式:

if (triggered) 
    {
        if (Input.GetKeyDown(KeyCode.E)) {
            onTriggerEnter.Invoke();
}
}

这是对话管理器脚本(我删除了不相关的行):

public class DialogueManager : MonoBehaviour {
private Queue<string> sentences;


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

}
public void StartDialogue(Dialogue dialogue)
{
    sentences.Clear();
   
    foreach (string sentence in dialogue.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(typingSpeed);
    }
}
void EndDialogue()
{
  
}

}

【问题讨论】:

    标签: c# unity3d input triggers dialog


    【解决方案1】:

    我假设您可以从触发它的位置访问DialogueManager 对象的实例?在这种情况下,您可以向对话管理器添加一个公共布尔值,在 StartDialogue() 中设置为 true,在 EndDialogue() 中设置为 false。然后确保当你按下 E 时这个布尔值是假的。

    可能有很多方法可以实现它,但这对我来说似乎是一个简单的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 2011-09-06
      • 2011-10-18
      • 2016-12-19
      • 1970-01-01
      相关资源
      最近更新 更多