Unity 自定义UI时应使用UI事件接口实现不是EventTrigger
程序员文章站
2022-03-31 20:53:42
...
EventTrigger很方便,但是如果我们在scroll view下的滚动栏里添加子物体的时候,使用了EventTrigger,会导致scroll view的滚动和拖拽在鼠标移入按钮内时被屏蔽,如果使用接口则一切正常
上代码:
public EventTrigger Trigger;
private void Start()
{
AddTriggersListener(Trigger, EventTriggerType.PointerEnter, PointerEnter);
}
public void PointerEnter(BaseEventData data) {
Debug.Log("鼠标移入游戏物体");
}
public static void AddTriggersListener(EventTrigger target, EventTriggerType eventTriggerType, Action<BaseEventData> action)
{
if (target.triggers.Count == 0)
{
target.triggers = new List<EventTrigger.Entry>();
}
UnityAction<BaseEventData> callBack = new UnityAction<BaseEventData>(action);
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = eventTriggerType;
entry.callback.AddListener(callBack);
target.triggers.Add(entry);
}
这样的操作会导致父物体scroll view的拖拽和滚动在鼠标点击在当前按钮上的时候失效,因为TriggerEvent会自动捕捉当前物体的所有UI事件,会导致屏蔽父物体的UI事件, 正确的做法应该是使用Unity UI事件的接口:
IPointerEnterHandler
public void OnPointerEnter(PointerEventData eventData)
{
Debug.Log("鼠标移入游戏物体");
}
这样就不会导致除实现接口外的UI事件被屏蔽,父scroll view可以正确的滚动
其他UI事件接口参考:
https://docs.unity3d.com/2018.4/Documentation/ScriptReference/EventSystems.IBeginDragHandler.html
上一篇: 使用一组坐标信息拟合圆(matlab)
下一篇: Matlab学习-day02