Unity中EventTrigger使用

  • 在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}
点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Twitter的分布式自增ID算法snowflake (Java版)

概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移

FlutterDojo设计之道—状态管理之路(七)

Provider在列表中使用在前面的讲解中,我们大部分的场景都是在普通的Box布局中,相信大家对Provider的使用已经非常清楚了,下面来看下在List中的使用场景,相信对于很多App来说,列表应该是大部分页面的核心UI,所以,到底如何在列表的「下拉刷新」、「上拉加载更多」、「Item点击修改状态」这几种场景下来使用Pro

Django中Admin中的一些参数配置

设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable