Как я могу включить все диалоги в цикл, чтобы избежать исключения из индекса? - PullRequest
0 голосов
/ 28 марта 2019
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: индекс вышел за пределы массива, а затем выполнит последний.

Если я добавлю -1 в проверке состояния:

if (dialogueNum == dialogue.Length - 1)

Тогда оно не сгенерирует исключение, а выполнит только первое и последнее, второе диалоговое окно никогда не будет выполнено.

А может, лучше сделать это в StartCoroutine, а не в Обновлении?С открытым массивом int, чтобы решить, сколько ждать между каждым диалогом?

Я хочу добавить переменную массива int, чтобы иметь возможность решать, сколько ждать между каждым диалогом.Например, между диалогом 0 и 1 подождите одну секунду, а между диалогом 1 и 2 подождите 5 секунд.

1 Ответ

1 голос
/ 28 марта 2019

Так же просто, как перемещение dialogNum + = 1 после вызова StartDialogue:

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!
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...