2015-05-26 8 views
4

В новом Unity3D UI (Unity> 4.6), я пытаюсь создать простой скрипт, который я могу подключить к компоненту пользовательского интерфейса (изображение, текст и т. Д.), Что позволит мне вклиниваться в пользовательский tooltip-обработчик. Поэтому мне нужно захватить PointerEnter и PointerExit на моем компоненте. До сих пор я делаю следующее без успеха. Я вижу компонент EVentTrigger, но не могу заставить моих делегатов стрелять, чтобы спасти мою жизнь.Unity3D Programmatically Assign EventTrigger Handlers

Любые идеи?

public class TooltipTrigger : MonoBehaviour { 

    public string value; 

    void Start() { 

    EventTrigger et = this.gameObject.GetComponent<EventTrigger>(); 

    if (et == null) 
     et = this.gameObject.AddComponent<EventTrigger>(); 

    EventTrigger.Entry entry; 
    UnityAction<BaseEventData> call; 

    entry = new EventTrigger.Entry(); 
    entry.eventID = EventTriggerType.PointerEnter; 
    call = new UnityAction<BaseEventData>(pointerEnter); 
    entry.callback = new EventTrigger.TriggerEvent(); 
    entry.callback.AddListener(call); 
    et.delegates.Add(entry); 

    entry = new EventTrigger.Entry(); 
    entry.eventID = EventTriggerType.PointerExit; 
    call = new UnityAction<BaseEventData>(pointerExit); 
    entry.callback = new EventTrigger.TriggerEvent(); 
    entry.callback.AddListener(call); 
    et.delegates.Add(entry); 
    } 

    private void pointerEnter(BaseEventData eventData) { 
    print("pointer enter"); 
    } 
    private void pointerExit(BaseEventData eventData) { 
    print("pointer exit"); 
    } 

} 

также ... другой метод, который я могу найти, когда ковыряться на форумах и документации, чтобы добавить обработчик событий с помощью реализации интерфейса, таких как:

public class TooltipTrigger : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { 

    public string value; 

    public void OnPointerEnter(PointerEventData data) { 
    Debug.Log("Enter!"); 
    } 

    public void OnPointerExit(PointerEventData data) { 
    Debug.Log("Exit!"); 
    } 

} 

Ни один из этих методов, кажется, работает для меня.

ответ

2

Второй способ (реализация IPointerEnterHandler и IPointerExitHandler интерфейсов) - это то, что вы ищете. Но для запуска методови OnPointerExit ваша сцена должна содержать GameObject с именем «EventSystem» с EventSystem -компонент (этот GameObject создается автоматически, когда вы добавляете какой-либо элемент интерфейса в сцену, и если его здесь нет - создайте его самостоятельно) и компоненты для различные методы ввода (например, StandaloneInputModule и TouchInputModule).

Также Canvas (объект с корнем вашей кнопки с компонентом Canvas) должен иметь компонент GraphicRaycaster, способный обнаруживать элементы UI путем их раскола.

Я только что проверил код с вашего поста и его работ просто отлично.

+0

Любопытно, какую именно версию редактора Unity вы используете? Я на 5.0.2p2. Не думайте, что это имеет значение, но я могу поклясться, что у меня все наладилось именно так, как вы описали, и я до сих пор ничего не получаю. (все другие «нормальные» события пользовательского интерфейса работают очень хорошо, только проблема - это программная, которую я пытаюсь настроить здесь) – slumtrimpet

+0

Я на 5.0.1f1. Можете ли вы показать мне иерархию своей сцены и что именно вы делаете с объектом, к которому вы подключили скрипт с помощью IPointHandlers? – Utamaru

+1

Еще одна полезная проверка, которую вы можете сделать, это выбрать игровой объект EventSystem и посмотреть на инспектора, внизу вы должны увидеть все события по мере их изменения, и если ваш proejct настроен правильно, вы должны увидеть имя «pointerEnter» объекта, в который вводится указатель, вызывается (если есть) в реальном времени. –

 Смежные вопросы

  • Нет связанных вопросов^_^