unity怎样建立unity 事件系统统

探索unity3D开发中订阅者模式实现事件机制的方法
探索unity3D开发中订阅者模式实现事件机制的方法
浏览次数:551
浏览次数:1282
浏览次数:1111
浏览次数:1362
浏览次数:1495
如果你对以下课程意犹未尽,,查看全部课程
HTML5全栈开发
HTML5最新课程
156 人在学
c#编程概述
C#快速入门
简单又好玩
120 人在学
没有账号?
s后重新发送
已有账号?
已有账号?
验证码确认
话题标题:
400-877-8190
登录后反馈&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
Unity3d开发(十七)UGUI 事件体系分析
摘要:div#cpcontent2{height:215width:215float:}div#cpmenu{height:200float:}div#cpcontent{height:200width:150float:}文章作者:松阳本文出自阿修罗道,禁止用于商业用途,转载请注明出处。原文链接:http://blog.csdn.net/fansongy/article/details/很多Unity3D
文章作者:松阳
本文出自 阿修罗道,禁止用于商业用途,转载请注明出处。
原文链接:http://blog.csdn.net/fansongy/article/details/
很多Unity3D项目都使用了UGUI,但并不是所有人都研究过它的内部结构。由于准备定制自己的UI,不弄明白它内部的机制有点说不过去呢。这篇文章主要分析一下它的事件体系结构,以及点击事件的逻辑流程。本篇文章依托于UGUI的源码,如何获取UGUI的源码可以参考Unity3d(十六) 重写UGUI组件事件体系
事件体系总体上说由四部分组成,分别是:监测器,派发器,采集器,响应器。
监测器指的是EventSystem类,它重写了MonoBehavior的Update方法,会在每一帧更新挂载在同一个GameObject上的BaseInputModule组件状态,并判断是否应该激活Module,如果是,则去调用各个Module的Process。
派发器指的就是BaseInputModule,最常用的是它的子类StandaloneInputMoudle。它完成了实际的事件生成。包括且不限于:事件类型的确定,事件数据的收集,派发对象的过滤。其中对派发对象的获取需要借助采集器,但需要通过监测器来获取,这种设计可以带来效率上的优势,虽然实现时并没有相关的代码。
采集器是指BaseRaycaster,在UGUI中使用的是其子类GraphicRaycaster。当事件发生时,会由Module请求一个射线点触,返回所有能点到的物体并返回,交由派发器进行过滤。它有一个内部的管理类RaycasterManager,用来做链接采集器和监测器的单向桥梁。
响应器是指IEventSystemHandler及其子类,例如最常用的IPointerClickHandler,它处理的是点击事件。通过ExecuteEvents类,可以将发生事件的对象上所有的响应器都获取到并调用其响应逻辑。以点击为例,事件最终会被派发到OnClick的代理上。完成逻辑的执行。
这四个模块大致的依赖关系如下:
类有好多,但相比于流程要简单不少。类分两部分,一部分是功能类,一部分是编辑器类。
功能类按照上一节的事件体系可以清晰的找到重要的基类,UML图如下:
这个图只是和点击相关的部分,当然还有很多其他的功能例如拖拽,滑动等等。但如果能找到这些重点,其他分支逻辑相信大家分分钟都能看懂了。
另一类是编辑器类,这个比较简单,我就没单独梳理类图,直接用VS自动生成的类图就够用了:
你若是觉得这些编辑器类没什么用,那你一定是对编辑器代码理解还不深。UGUI的编辑器界面还算获得了广泛的好评,当需要自定义Inspector界面时,一些功能一定用得上,如果有空我也准备深入研究一下。点击的逻辑流程
下面基于事件体系的划分,针对一次按钮点击梳理一下调用逻辑,流程图如下:
“动手改之前,要先弄明白别人的程序逻辑”。说起来很简单,但又有几个人能坚持做好呢?虽然我也是在外层包装了各种控件之后,才下决心重写UGUI
。 看到现在这种程度可真心花了不少时间,整理出来希望对大家有帮助
如果你觉得这篇文章对你有帮助,可以顺手点个顶,不但不会喜当爹,还能让更多人能看到它...
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
为您提供0门槛上云实践机会
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
Unity3d开发(十七)UGUI 事件体系分析相关信息,包括
的信息,所有Unity3d开发(十七)UGUI 事件体系分析相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International[Unity3D]简单的消息事件系统
事实上中小型的游戏不需要用到很复杂的消息系统。能全局注册监听,回调参数就足够了。
将用过的一个简单的消息系统整理下放Github上了,有需要的小伙伴们自取吧。
GITHUB传送门:
how to use ?
1.Add the scripts(EventsMgr.cs) into your
Unity3D-Assets-Path
2.Register your event as enum ,every enum value is an event ,
public enum eEventsKey {
ControlSystem_RabbitJump,
3.Init Events System before u use it
EventsMgr.GetInstance().Init();
4.Attach your method to the event key:
EventsMgr.GetInstance().AttachEvent(eEventsKey.ControlSystem_RabbitJump,
RabbitJump);
5.Trigger the event where u want , and u can add u param to
the event , such as:
EventsMgr.GetInstance().TriigerEvent(eEventsKey.ControlSystem_RabbitJump,
6.Detach the event from method ,if u don't want it:
EventsMgr.GetInstance().DetachEvent(eEventsKey.ControlSystem_RabbitJump,
RabbitJump);
Any question see "testEvent.cs" before , this is a demo.
That's all ,
A Simple Events-Manager,
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。为什么Unity要重新定义自己的事件系统_百度知道
为什么Unity要重新定义自己的事件系统
我有更好的答案
unity代码中一般使用如下三种系统 :1、C#语言中的event;2、Unity自带的事件系统即UnityEvent。3、第三方的事件类,如Advanced CSharp Messenge如果不添加或只添加一个监听函数,UnityEvent产生的垃圾就比C# event少,反之则要多。
UnityEvent首次触发事件时会产生垃圾,而C# event不会产生任何垃圾,且前者的速度比后者慢两倍之多。
采纳率:96%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Unity 新UI事件系统(EventSystem) Demo
我的图书馆
Unity 新UI事件系统(EventSystem) Demo
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&新的UI系统消息传递被全新设计,该系统用MonoBehaviour 来实现自定义的接口,以便可以接受来自消息系统的回调。当一个对象被消息的执行指定,那么这个对象的所有实现了自定义接口的脚本将被通知,指定的方法将被执行。
1.定义一个接口ICustomMessageTarget继承IEventSystemHandler, 这样当发送此类型消息时,实现此接口的脚本所在的对象将会被通知。
using UnityE
using UnityEngine.EventS
using System.C
public interface ICustomMessageTarget : IEventSystemHandler
void Message1();
void Message2();
2.测试脚本CustomMessageTarget实现ICustomMessageTarget,加到一个对象上。
using UnityE
using System.C
public class CustomMessageTarget : MonoBehaviour , ICustomMessageTarget
public void Message1()
Debug.Log("Message1 received.");
public void Message2()
Debug.Log("Message2 received.");
这样当执行下面代码时事件将被触发
ExecuteEvents.Execute&ICustomMessageTarget&(go, null, (x, y) =& x.Message1());
同时EventSystem还提供了大量的事件, 只需要在脚本中实现这些接口就可以触发相应的方法
IPointerEnterHandler - OnPointerEnter - Called when a pointer enters the object
IPointerExitHandler - OnPointerExit - Called when a pointer exits the object
IPointerDownHandler - OnPointerDown - Called when a pointer is pressed on the object
IPointerUpHandler - OnPointerUp - Called when a pointer is released (called on the original the pressed object)
IPointerClickHandler - OnPointerClick - Called when a pointer is pressed and released on the same object
IInitializePotentialDragHandler - OnInitializePotentialDrag - Called when a drag target is found, can be used to initialise values
IBeginDragHandler - OnBeginDrag - Called on the drag object when dragging is about to begin
IDragHandler - OnDrag - Called on the drag object when a drag is happening
IEndDragHandler - OnEndDrag - Called on the drag object when a drag finishes
IDropHandler - OnDrop - Called on the object where a drag finishes
IScrollHandler - OnScroll - Called when a mouse wheel scrolls
IUpdateSelectedHandler - OnUpdateSelected - Called on the selected object each tick
ISelectHandler - OnSelect - Called when the object becomes the selected object
IDeselectHandler - OnDeselect - Called on the selected object becomes deselected
IMoveHandler - OnMove - Called when a move event occurs (left, right, up, down, ect)
ISubmitHandler - OnSubmit - Called when the submit button is pressed
ICancelHandler - OnCancel - Called when the cancel button is pressed
using UnityE
using System.C
using UnityEngine.EventS
public class TestPointerEnterEvent : MonoBehaviour , IPointerEnterHandler , IPointerClickHandler
public void OnPointerEnter(PointerEventData data)
Debug.Log("Pointer enter.");
public void OnPointerClick(PointerEventData data)
Debug.Log("Pointer click.");
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:http://www.cnblogs.com/ssw-men/p/4318642.html
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢}

我要回帖

更多关于 unity 怎么建立2d地图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信