New UI 4.6 Действие при нажании на кнопку

Графический интерфейс пользователя

New UI 4.6 Действие при нажании на кнопку

Сообщение FIXMAX 03 ноя 2014, 23:14

Доброго времени суток. Поиск ответов не дал результатов (или я их не понял).
Вопрос касается нового UI ( [unity 3D] 4.6beta). Динамически создаю элементы (кнопки) и мне необходимо вызывать определенный метод с параметром. Собственно метод вызывать получается, а вот как передать параметр не разобрался. Скорее всего в корне неправильно подхожу к вопросу.
Пример генерации UI:
Синтаксис:
Используется csharp
GameObject item_one = Resources.Load<GameObject>("_GUI/editor/editor_item");
foreach(KeyValuePair<int,GameObject> item in main_data.items){
        GameObject itm = Instantiate(item_one, Vector3.zero, Quaternion.identity) as GameObject;
        itm.name = item.Value.name;
        itm.transform.parent = GameObject.Find("editor_items/main/container/content").transform;
        itm.transform.FindChild("Text").GetComponent<Text>().text = item.Value.name;
}

Пробовал вешать листенер на кнопку (в моем случае она лежит тут _GUI/editor/editor_item, это префаб с кнобкой), могу только вызвать метод без параметоров. Пробовал добавлять скрипт к кнопке, но в нем не вызываются методы onMouseDown, onClick при клике по кнопке.
По большому счету мне нужен пример трюма/вещь мешка (для этого есть термин, не помню его) в новом UI.
FIXMAX
UNец
 
Сообщения: 7
Зарегистрирован: 27 мар 2011, 11:49

Re: New UI 4.6 Действие при нажании на кнопку

Сообщение Woolf 03 ноя 2014, 23:22

Синтаксис:
Используется csharp
 Button button = btn.GetComponent<Button>();
            if (button != null) {
                button.onClick.AddListener(() => selectShadowClick(shid));
            }
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: New UI 4.6 Действие при нажании на кнопку

Сообщение FIXMAX 04 ноя 2014, 00:10

Да, заработало, спасибо. Но есть одно "но", отправляется последний элемент в цикле при нажатии на любую кнопку.
Синтаксис:
Используется csharp
        void Start () {
                GameObject item_one = Resources.Load<GameObject>("_GUI/editor/editor_item");
                foreach(KeyValuePair<int,GameObject> item in main_data.items){
                        GameObject itm = Instantiate(item_one, Vector3.zero, Quaternion.identity) as GameObject;
                        itm.name = item.Value.name;
                        itm.transform.parent = GameObject.Find("editor_items/main/container/content").transform;
                        itm.transform.FindChild("Text").GetComponent<Text>().text = item.Value.name;
                        itm.GetComponent<Button>().onClick.AddListener(() => TestAction(item.Value.name));
                }
                editor_items.SetActive(false);

                StartCoroutine(LoadRooms());
        }

        void TestAction(string name){
                Debug.Log (name);
        }
 
FIXMAX
UNец
 
Сообщения: 7
Зарегистрирован: 27 мар 2011, 11:49

Re: New UI 4.6 Действие при нажании на кнопку

Сообщение Woolf 04 ноя 2014, 02:52

Ну тут уж сами ищите, где ошибка. У меня эта механика отлично работает.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: New UI 4.6 Действие при нажании на кнопку

Сообщение FIXMAX 04 ноя 2014, 03:09

Сделал немного по другому.
Использовал скрипт, который висит на каждой кнопке
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class editor_item : MonoBehaviour, IPointerDownHandler
{
        void Start()
        {
                //Debug.Log ("It is item. My name is " + name);
        }

        public void OnPointerDown(PointerEventData data){
                Debug.Log (name);
        }
}

В любом случае спасибо.
FIXMAX
UNец
 
Сообщения: 7
Зарегистрирован: 27 мар 2011, 11:49

Re: New UI 4.6 Действие при нажании на кнопку

Сообщение Woolf 04 ноя 2014, 05:15

FIXMAX писал(а):Сделал немного по другому.
Использовал скрипт, который висит на каждой кнопке
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class editor_item : MonoBehaviour, IPointerDownHandler
{
        void Start()
        {
                //Debug.Log ("It is item. My name is " + name);
        }

        public void OnPointerDown(PointerEventData data){
                Debug.Log (name);
        }
}

В любом случае спасибо.


Кстати да )) С 20й версии 4.6 оно стало рассылать события. Жаль, что не все.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59


Вернуться в uGUI

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

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