-
在Unity中,点击场景中的模型我们往往需要检测是否点击在了UI上,这时我们需要进行一系列的判断,往往效果还不好,因此我在场景中模型的点击也使用了EventTrigger,EventTrigger我们在UI上的使用比较常见,但是它也可以用于场景点击,并且能屏蔽点击到UI又响应了模型的点击事件,以下是点击事件的组件脚本
1using UnityEngine; 2using UnityEngine.EventSystems; 3public class EventTriggerListener : EventTrigger 4{ 5 public delegate void VoidDelegate(); 6 public delegate void EventDelegate(BaseEventData baseEventData); 7 public delegate void BoolDelegate(bool state); 8 public delegate void FloatDelegate(float delta); 9 public delegate void VectorDelegate(Vector2 delta); 10 public delegate void ObjectDelegate(GameObject obj); 11 public delegate void KeyCodeDelegate(KeyCode key); 12 13 public VoidDelegate onClick; 14 public EventDelegate onEventClick; 15 public VoidDelegate onDown; 16 public VoidDelegate onEnter; 17 public VoidDelegate onExit; 18 public VoidDelegate onUp; 19 public VoidDelegate onSelect; 20 public VoidDelegate onUpdateSelect; 21 22 23 static public EventTriggerListener Add(Transform transform) 24 { 25 EventTriggerListener listener = transform.GetComponent<EventTriggerListener>(); 26 if (listener == null) 27 listener = transform.gameObject.AddComponent<EventTriggerListener>(); 28 return listener; 29 } 30 31 public override void OnPointerClick(PointerEventData eventData) 32 { 33 if (onClick != null) 34 { 35 onClick(); 36 } 37 if (onEventClick != null) 38 { 39 onEventClick(eventData); 40 } 41 } 42 43 public override void OnPointerDown(PointerEventData eventData) 44 { 45 if (onDown != null) 46 onDown(); 47 } 48 49 public override void OnPointerEnter(PointerEventData eventData) 50 { 51 if (onEnter != null) 52 onEnter(); 53 } 54 55 public override void OnPointerExit(PointerEventData eventData) 56 { 57 if (onExit != null) 58 onExit(); 59 } 60 61 public override void OnPointerUp(PointerEventData eventData) 62 { 63 if (onUp != null) 64 onUp(); 65 } 66 67 public override void OnSelect(BaseEventData eventData) 68 { 69 if (onSelect != null) 70 onSelect(); 71 } 72 73 public override void OnUpdateSelected(BaseEventData eventData) 74 { 75 if (onUpdateSelect != null) 76 onUpdateSelect(); 77 } 78} -
使用方法,只需要在模型对象上挂在脚本,该脚本注册下上面的脚本事件。
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.EventSystems; 5 6public class EnvironmentClick : MonoBehaviour 7{ 8 private void Awake() 9 { 10 EventTriggerListener.Add(transform).onEventClick += OnGroundClick; 11 } 12 public void OnGroundClick(BaseEventData data) 13 { 14 if (Input.GetMouseButton(1)) return; 15 if (Input.GetMouseButton(2)) return; 16 17 //do something 18 19 } 20 21}
Unity中EventTrigger使用
Wesley13
2021-10-11
1396 0 0
点赞
收藏
评论区
加载中...