如何阻止对话回到开头?
How to stop the dialogue from returning to the beginning?
当玩家与物体发生碰撞并使用“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()
{
}
}
我假设您可以从触发它的地方访问 DialogueManager
对象的实例?在这种情况下,您可以向对话管理器添加一个 public 布尔值,您在 StartDialogue()
中设置为 true,在 EndDialogue()
中设置为 false。然后确保当你按下 E 时这个布尔值是假的。
可能有多种实现方法,但这对我来说似乎是一个简单的解决方案。
当玩家与物体发生碰撞并使用“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()
{
}
}
我假设您可以从触发它的地方访问 DialogueManager
对象的实例?在这种情况下,您可以向对话管理器添加一个 public 布尔值,您在 StartDialogue()
中设置为 true,在 EndDialogue()
中设置为 false。然后确保当你按下 E 时这个布尔值是假的。
可能有多种实现方法,但这对我来说似乎是一个简单的解决方案。