Unity中EventTrigger的几种使用方法

Unity中EventTrigger的几种使用方法

EventTrigger事件触发器的使用可以说是无处不在,EventTrigger继承了很多的事件接口,这些接口对我们开发是十分有用的。弄懂EventTrigger在以后开发游戏过程中可以说是事半功倍。

以下为官方API中的类

namespace UnityEngine.EventSystems
{
    [AddComponentMenu ("Event/Event Trigger")]
    public class EventTrigger : MonoBehaviour, IEventSystemHandler, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler, IBeginDragHandler, IInitializePotentialDragHandler, IDragHandler, IEndDragHandler, IDropHandler, IScrollHandler, IUpdateSelectedHandler, ISelectHandler, IDeselectHandler, IMoveHandler, ISubmitHandler, ICancelHandler
    {
        //
        // Fields
        //
        [Obsolete ("Please use triggers instead (UnityUpgradable) -> triggers", true)]
        public List<EventTrigger.Entry> delegates;

        //
        // Properties
        //
        public List<EventTrigger.Entry> triggers {
            get;
            set;
        }

        //
        // Constructors
        //
        protected EventTrigger ();

        //
        // Methods
        //
        private void Execute (EventTriggerType id, BaseEventData eventData);

        public virtual void OnBeginDrag (PointerEventData eventData);

        public virtual void OnCancel (BaseEventData eventData);

        public virtual void OnDeselect (BaseEventData eventData);

        public virtual void OnDrag (PointerEventData eventData);

        public virtual void OnDrop (PointerEventData eventData);

        public virtual void OnEndDrag (PointerEventData eventData);

        public virtual void OnInitializePotentialDrag (PointerEventData eventData);

        public virtual void OnMove (AxisEventData eventData);

        public virtual void OnPointerClick (PointerEventData eventData);

        public virtual void OnPointerDown (PointerEventData eventData);

        public virtual void OnPointerEnter (PointerEventData eventData);

        public virtual void OnPointerExit (PointerEventData eventData);

        public virtual void OnPointerUp (PointerEventData eventData);

        public virtual void OnScroll (PointerEventData eventData);

        public virtual void OnSelect (BaseEventData eventData);

        public virtual void OnSubmit (BaseEventData eventData);

        public virtual void OnUpdateSelected (BaseEventData eventData);

        //
        // Nested Types
        //
        [Serializable]
        public class Entry
        {
            public EventTriggerType eventID;

            public EventTrigger.TriggerEvent callback;

            public Entry ();
        }

        [Serializable]
        public class TriggerEvent : UnityEvent<BaseEventData>
        {
            public TriggerEvent ();
        }
    }
}
接下来用不同的方式来看EventTrigger的用法:
1.通过编辑器中添加

在Inspector中添加EventTrigger的componnent组件,然后点击Add New Event Type按钮添加一个基本的事件,主基本事件如下图:
在这里插入图片描述
当我们选择一个事件的时候,就相当于将要于此事件绑定了,例如当我们选择Pointer Click的时候,绑定了这个组件的物体将接受Pointer Click 事件的消息,当我们在物体上按下鼠标的时候,(当然空间中的物体我们是无法通过鼠标点击的,但是当我们可以通过射线碰撞的方法,来实现Pointer Enter,Pointer Exit等事件的触发)这里我们用来绑定这个EventTrigger 的是一个UI Panel 这样便可以让它接受我们自定义的单击事件了
在这里插入图片描述
这里的1是我们之前选择的Pointer click 事件,2处是将我们3处要执行我们想要的触发函数所在脚本的gameobject托入这里,然后才能选择这个gameobject对象上的脚本来执行,当点击了panel的时候就会触发MyClick这个函数(这是我们自定义的函数),编辑器中的方法基本就是这样了。

2.接下来便是如何在脚本中实现刚才的功能
using UnityEngine;
using System.Collections;
using System.Collections.Generic;using UnityEngine.Events;
using UnityEngine.EventSystems;
public class GameManager : MonoBehaviour {
        void Start()
        {
                UnityAction<BaseEventData> click = new UnityAction<BaseEventData> (MyClick);
                EventTrigger.Entry myclick = new EventTrigger.Entry ();
                myclick.eventID = EventTriggerType.PointerClick;
                myclick.callback.AddListener (click);

                EventTrigger trigger = gameObject.AddComponent<EventTrigger> ();
                trigger.triggers.Add (myclick);
        }


        public void MyClick(BaseEventData data)
        {
                Debug.Log ("点击");
        }}

将这个脚本添加到Panel上面,然后运行,点击Panel,便打印出了“点击”。

  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
Unity EventTrigger 可以在场景添加事件,也可以在代码动态添加事件。 以下是一个示例代码,演示如何动态添加 EventTrigger 事件。 ```csharp using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class AddEventTrigger : MonoBehaviour { // 添加的事件类型 public EventTriggerType eventType; void Start() { // 获取当前对象上的 EventTrigger 组件 EventTrigger eventTrigger = GetComponent<EventTrigger>(); // 如果 EventTrigger 为空,则添加该组件 if (eventTrigger == null) { eventTrigger = gameObject.AddComponent<EventTrigger>(); } // 创建一个新的 EventTrigger.Entry 条目,并为其添加回调函数 EventTrigger.Entry entry = new EventTrigger.Entry(); entry.eventID = eventType; entry.callback.AddListener((data) => { OnEventTriggered((PointerEventData)data); }); // 将新的 EventTrigger.Entry 条目添加到 EventTrigger 组件上 eventTrigger.triggers.Add(entry); } // 回调函数 void OnEventTriggered(PointerEventData data) { Debug.Log("Event Triggered: " + eventType); } } ``` 在上面的示例代码,我们首先获取当前对象上的 EventTrigger 组件。如果该组件不存在,则添加该组件。 然后,我们创建一个新的 EventTrigger.Entry 条目,并为其添加回调函数。回调函数接收一个 PointerEventData 参数,该参数包含了事件的详细信息。 最后,我们将新的 EventTrigger.Entry 条目添加到 EventTrigger 组件上。这样,当指定的事件类型被触发时,回调函数就会被调用。 可以在 Unity Editor 将该脚本添加到任意一个 GameObject 上,并设置 eventType 的值为所需的事件类型,然后运行游戏即可看到回调函数被触发的输出信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值