Привязка событий

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

Привязка событий

Сообщение GLeBaTi 11 окт 2015, 22:32

Здравствуйте. В коде привязываю события к элементам:
Синтаксис:
Используется csharp
createdPin.GetComponent<EventTrigger>().AddEventTrigger(inPin, OnPinMouseUp, EventTriggerType.PointerUp);
createdPin.GetComponent<EventTrigger>().AddEventTrigger(inPin, OnPinMouseDown, EventTriggerType.PointerDown);
void OnPinMouseUp(Pin pin)
    {
        Logger.Instance.Debug("OnPinMouseUp:" + pin.ToString());
    }
void OnPinMouseDown(Pin pin)
    {
        Logger.Instance.Debug("OnPinMouseDown:" + pin.ToString());
    }
...
public static void AddEventTrigger(this EventTrigger objectTrigger, UnityAction action, EventTriggerType triggerType)
    {
        EventTrigger.TriggerEvent trigger = new EventTrigger.TriggerEvent();
        trigger.AddListener((eventData) => action());
        EventTrigger.Entry entry = new EventTrigger.Entry() { callback = trigger, eventID = triggerType };
        objectTrigger.triggers.Add(entry);
    }
public static void AddEventTrigger<T>(this EventTrigger objectTrigger, T objectForAction, Action<T> action, EventTriggerType triggerType)
    {
        AddEventTrigger(objectTrigger, () => action(objectForAction), triggerType);
    }


Проблема в том, что если я нажимаю мышкой на pin13, то в логе пишет правильно: "OnPinMouseDown: pin13"
Затем я тяну мышь к другому pin15 и откускаю клавишу мыши. Пишет неправильно: "OnPinMouseUp: pin13", а должно: "OnPinMouseUp: pin15"
В чем может быть проблема? И как её решить?
GLeBaTi
UNIт
 
Сообщения: 80
Зарегистрирован: 29 янв 2011, 14:42

Re: Привязка событий

Сообщение samana 11 окт 2015, 23:03

Дело в том, что PointerUp всегда сработает от того объекта, на котором до этого была нажата мышь.
Вам нужно словить объект, который находится под курсором в момент PointerUp.
Не знаю как прикрутить это к вашему коду, так как для меня он сложный, но в обычной реализации этих событий (через интерфейсы), это выглядит как-то так:
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEngine.EventSystems;

public class ImageEvents : MonoBehaviour, IPointerUpHandler, IPointerDownHandler
{
    public void OnPointerDown(PointerEventData eventData)
    {
        Debug.Log(gameObject);
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        Debug.Log(eventData.pointerEnter);// возвращает gameObject который находится под курсором
    }
}
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Привязка событий

Сообщение GLeBaTi 12 окт 2015, 09:21

Спасибо, попробую использовать. Странная реализация конечно от юнитеков.
GLeBaTi
UNIт
 
Сообщения: 80
Зарегистрирован: 29 янв 2011, 14:42


Вернуться в uGUI

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

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