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

Программирование на Юнити.

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

Сообщение Ancloosee 19 май 2017, 11:23

Привет всем

Есть 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 выскакивает ексепшн- выход на пределы масива

Где что не так?
Как можно решить?
Ancloosee
UNец
 
Сообщения: 25
Зарегистрирован: 27 янв 2017, 11:53

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

Сообщение samana 19 май 2017, 15:11

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


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 24