EventTrigger动态添加监听事件

首先需要引用两个程序集:

using UnityEngine.Events;

using UnityEngine.EventSystems;

 using UnityEngine;
 2 using UnityEngine.EventSystems;
 3 using UnityEngine.Events;
 4 
 5 public class Cube : MonoBehaviour
 6 {
 7     //获取自己的 EventTrigger 组件
 8     private EventTrigger _eventTrigger;
 9     public EventTrigger eventTrigger
10     {
11         get
12         {
13             if (_eventTrigger == null)
14             {
15                 _eventTrigger = this.GetComponent<EventTrigger>();
16             }
17             return _eventTrigger;
18         }
19     }
20 
21     void Start()
22     {
23         AddEventTrigger(EventTriggerType.PointerEnter, Do);
24     }
25 
26     /// <summary>
27     /// 给自己添加监听事件
28     /// </summary>
29     /// <param name="eventType">监听事件类型</param>
30     /// <param name="unityAction">监听事件触发的函数</param>
31     private void AddEventTrigger(EventTriggerType eventType, UnityAction<BaseEventData> unityAction)
32     {
33         //判断是否有 EventTrigger 组件,没有就添加
34         if (eventTrigger == null)
35         {
36             this.gameObject.AddComponent<EventTrigger>();
37         }
38         //定义回掉函数,委托
39         UnityAction<BaseEventData> action = new UnityAction<BaseEventData>(unityAction);
40         //判断 EventTrigger 组件上是否已经存在监听事件,如果有就查找是否存在eventType类型的监听事件
41         //如果找到了,就赋值,并返回
42         if (eventTrigger.triggers.Count != 0)
43         {
44             for (int i = 0; i < eventTrigger.triggers.Count; i++)
45             {
46                 if (eventTrigger.triggers[i].eventID == eventType)
47                 {
48                     eventTrigger.triggers[i].callback.AddListener(unityAction);
49                     return;
50                 }
51             }
52         }
53         //定义所要绑定的事件类型
54         EventTrigger.Entry entry = new EventTrigger.Entry();
55         //设置事件类型
56         entry.eventID = eventType;
57         //设置回掉函数
58         entry.callback.AddListener(action);
59         //添加触发事件到EventTrigger组件上
60         eventTrigger.triggers.Add(entry);
61     }
62     /// <summary>
63     /// 触发事件需要执行的函数,由于UnityAction委托需要一个BaseEventData类型参数,所以需要设置一个BaseEventData类型的形参
64     /// </summary>
65     private void Do(BaseEventData baseEventData)
66     {
67         print(123);
68     }
69 }

转载:https://www.cnblogs.com/xiaoyulong/p/8280823.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值