Событие OnKlick выводит ошибку при срабатывании

Повесил я на объект типа Text компонент Button. Таких объектов у меня 4 и мне нужно их менять во время работы программы. Делаю я это так:

public void MoviesListPlayer(GameObject target)
{
    // заполнение окна со способностями, включая функции самих способностей
    // принимает на вход того, кого выбрал игрок

    if (controller.activeCharacter != ActiveCharacter.None)
    {
        for (int i = 0; i < 4; i++)
        {
            Debug.Log("i: " + i);
            controller.moviesListPlayer[i].text = this.healingMovies[i].Name;
            controller.moviesListPlayer[i].GetComponent<Button>().onClick.AddListener(() => {
                this.MoveWasSelect();
                this.healingMovies[i].AttackMove(target);
            });
        }

        controller.moviesForFriendlyPanel.SetActive(true);
    }
    else
    {
        return;
    }
    controller.moviesListPlayer[0].GetComponent<Button>().onClick.Invoke();
}

moviesListPlayer - это и есть массив с объектами типа Text.

Последней строкой я проверил догадку и действительно - ошибка происходит именно при нажатии на кнопку. Цикл работает корректно. Методы, которые я повесил на событие не отображаются в инспекторе во время работы. MoveWasSelect() работает, а как очередь доходит до AttackMove(target) так тут движок ворчит о индексе вне массива. Если вдруг необходимо, то вот функция AttackMove(target) :

    public void AttackMove(GameObject target)
    {
        if (target.CompareTag("Player"))
        {
            target.GetComponent<PlayerInBattle>().Health -= BaseHealing;
        }
    }

Текст ошибки вот:

IndexOutOfRangeException: Index was outside the bounds of the array.
PlayerInBattle+<>c__DisplayClass31_1.<MoviesListPlayer>b__0 () (at Assets/Scripts/PlayerBattle/PlayerInBattle.cs:166)
UnityEngine.Events.InvokableCall.Invoke () (at <05f2ac9c8847426992765a22ef6d94ca>:0)
UnityEngine.Events.UnityEvent.Invoke () (at <05f2ac9c8847426992765a22ef6d94ca>:0)
PlayerInBattle.MoviesListPlayer (UnityEngine.GameObject target) (at Assets/Scripts/PlayerBattle/PlayerInBattle.cs:176)
Healer.OnMouseDown () (at Assets/Scripts/PlayerBattle/Healer.cs:34)
UnityEngine.SendMouseEvents:DoSendMouseEvents(Int32)

Как исправить эту ошибку?


Ответы (0 шт):