как накидывать на кнопку свой Номер массива делегат?

Общие вопросы о Unity3D

как накидывать на кнопку свой Номер массива делегат?

Сообщение MegaMan11 30 май 2020, 22:47

Привет всем! У меня вопрос хочу при создании массива кнопок поставить свой лиснер метод со своим аргументом как это делается?? как только не пытался Вот код
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEngine.UI;

public class AllFromTheEntity : EntityPanel
{
    private Entity entityGO;

    delegate void butDelegate(byte num);

    butDelegate[] butDel = new butDelegate[10];


    public override void SpawnAll()
    {

        entityGO = EnvokeObject.GetComponent<Entity>();
        if (entityGO.ImproveToPref.Count > 1)
        {
     

            {

                foreach (Transform child in GridGenerator.transform)
                {
                    Destroy(child.gameObject);
                }


                byte i = 0;

                foreach (GameObject b in entityGO.ImproveToPref)   /// вызываем  
                {

                    GameObject clone = Instantiate(BuildingButPref, transform.position, transform.rotation);
                    clone.transform.SetParent(GridGenerator.transform);

                    clone.GetComponent<Image>().sprite = BuildingInShopPrefs[i].GetComponent<Entity>().spriteU;
     
                    Debug.Log("i++" + i);

                    //   butDel[i] =  NumTransformane;
                    //    clone.GetComponent<Button>().onClick.AddListener(    delegate { butDel[i]; } );

                    clone.GetComponent<Button>().onClick.AddListener(() => NumTransformane(i));
                    i++;

                }
                byte i = 0;
                foreach (GameObject b in entityGO.skill)   /// вызываем  
                {

                    GameObject clone = Instantiate(BuildingButPref, transform.position, transform.rotation);
                    clone.transform.SetParent(GridGenerator.transform);

                    //   butDel[i] =  NumSkill;
                    //    clone.GetComponent<Button>().onClick.AddListener(    delegate { butDel[i]; } );
                    clone.GetComponent<Image>().sprite = entityGO.skill[i].GetComponent<Entity>().spriteU;
   
                    Debug.Log("i++" + i);
                     
                    clone.GetComponent<Button>().onClick.AddListener(() => NumSkill(i));
                    i++;

                }


            }


        }
    }

    private void GoTransformane(byte num)
    {
        Debug.Log("GoTransformane" + num);
    }

    public void NumSkill(byte num)
    {
        Debug.Log("NumSkill" + num);
    }
     

}
 
MegaMan11
UNец
 
Сообщения: 37
Зарегистрирован: 06 май 2020, 22:03

Re: как накидывать на кнопку свой Номер массива делегат?

Сообщение 1max1 31 май 2020, 10:41

А как этот код у тебя компилируется, если у тебя "byte i" два раза подряд объявлена?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: как накидывать на кнопку свой Номер массива делегат?

Сообщение samana 31 май 2020, 10:51

Строчку
Синтаксис:
Используется csharp
clone.GetComponent<Button>().onClick.AddListener(() => NumSkill(i));

заменить на

Синтаксис:
Используется csharp
byte clone_i = i;
clone.GetComponent<Button>().onClick.AddListener(() => NumSkill( clone_i));
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: как накидывать на кнопку свой Номер массива делегат?

Сообщение MegaMan11 31 май 2020, 14:31

да спс Замыкание было
MegaMan11
UNец
 
Сообщения: 37
Зарегистрирован: 06 май 2020, 22:03


Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16