Страница 1 из 1

Проблема с добавлением в AddListener

СообщениеДобавлено: 19 май 2017, 11:23
Ancloosee
Привет всем

Есть N количество Button
Нам нужно при нажатии на все из них вызвать одну и ту же функцию но с разными данными
Для лучшего понимания на на Button ник игрока и при нажатии должна выскочить панелька с информацией о нем
Что имеем
Функция которая пробежится по всем Button и добавит к каждому функцию
Game.getGame()[i]- возвращает игрока и всю информацию о нем
Синтаксис:
Используется csharp
 private void addEventForInformation()
    {

        for (int i = 0; i < Game.getGame().numberOfPlayers; i++)
        {
           
            GameObject.Find("InformationAboutPlayer" + (i + 1)).GetComponent<Button>().onClick.AddListener(() => { showPanelInformation(Game.getGame()[i]); });
        }
    }
 

Сама функция которую нужно вызвать
Синтаксис:
Используется csharp
 private void showPanelInformation(Player player)
    {
        GameObject.Find("PanelNamePlayer").GetComponent<Text>().text = player.namePlayer;
        GameObject.Find("PanelPealPlayerMoney").GetComponent<Text>().text = player.moneyPlayer+" $";

        GameObject.Find("InformationPanelAboutPlayer").GetComponent<Animation>().enabled = true;

    }
 


Компилится все нормально, но при нажании на Button выскакивает ексепшн- выход на пределы масива

Где что не так?
Как можно решить?

Re: Проблема с добавлением в AddListener

СообщениеДобавлено: 19 май 2017, 15:11
samana
Это замыкание.
Перед тем как передать в метод параметр, нужно создать ссылку на него и передавать эту ссылку, на не напрямую через массив[i].
Синтаксис:
Используется csharp
Player p = Game.getGame()[i];
GameObject.Find("InformationAboutPlayer" + (i + 1)).GetComponent<Button>().onClick.AddListener(() => { showPanelInformation(p); });