using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DialogueTrigger : MonoBehaviour
{
public Dialogue[] dialogue;
private int dialogueNum = 0;
public void TriggerDialogue()
{
if (FindObjectOfType<DialogueManager>() != null)
{
FindObjectOfType<DialogueManager>().StartDialogue(dialogue[dialogueNum]);
}
}
private void Update()
{
if (DialogueManager.dialogueEnded == true)
{
if (dialogueNum == dialogue.Length)
{
return;
}
else
{
dialogueNum += 1;
FindObjectOfType<DialogueManager>().StartDialogue(dialogue[dialogueNum]);
}
}
}
}
例如,如果我在数组中有3个对话,它将进行第一个对话,然后将引发异常IndexOutOfRangeException:Index在数组的边界之外,然后将进行最后一个对话。
如果要在条件检查中添加-1:
if (dialogueNum == dialogue.Length - 1)
然后它将不会引发异常,而只会执行第一个对话,而不会进行第二个对话。
也许最好将它放在StartCoroutine中而不是在Update中?使用public int数组来决定每次对话之间要等待多少时间?
我想添加int数组变量,以便能够确定每次对话之间要等待的时间。例如,对话0和对话1之间等待一秒钟,对话1和对话2之间等待5秒。
答案 0 :(得分:1)
就像在StartDialogue调用之后移动对白Num + = 1一样简单:
private void Update()
{
if (DialogueManager.dialogueEnded == true)
{
// Lets assume dialogueNum is in the last index, dialogueNum = 2
// So dialogueNum == dialogue.Length is false
if (dialogueNum == dialogue.Length) // THIS IS FALSE
{
return;
}
else
{
// If dialogueNum +=1 was here, dialogueNum would have been 3
FindObjectOfType<DialogueManager>tartDialogue(dialogue[dialogueNum]);
// Then we try to get the element at index 3 and get the out of index exception
dialogueNum += 1; // MOVE dialogueNum += 1 HERE!
}
}
}