4

在新的 Unity3D UI(Unity > 4.6)中,我正在尝试创建一个简单的脚本,我可以将其附加到 UI 组件(图像、文本等),这将允许我插入自定义工具提示处理程序。所以我需要在我的组件上捕获 PointerEnter 和 PointerExit。到目前为止,我正在执行以下操作但没有成功。我看到 EVentTrigger 组件出现,但无法让我的代表开火以挽救我的生命。

有任何想法吗?

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!");
  }

}

这些方法似乎都不适合我。

4

1 回答 1

2

第二种方法(实现IPointerEnterHandlerIPointerExitHandler接口)是您正在寻找的。但是要触发OnPointerEnterOnPointerExit方法,您的场景必须包含名为“EventSystem”的GameObject 和EventSystem-component(当您将任何 UI 元素添加到场景时自动创建此 GameObject,如果它不在这里 - 您自己创建它)和用于不同输入法的组件(例如StandaloneInputModuleTouchInputModule)。

此外,Canvas(您的按钮的带有组件的根对象Canvas)必须具有GraphicRaycaster能够通过光线投射到 UI 元素中来检测 UI 元素的组件。

我刚刚测试了您帖子中的代码,它的工作正常。

于 2015-05-26T13:20:06.857 回答