unity3d 消息传递系统Messaging System
2016-01-21 14:42
1636 查看
消息传递系统
新的UI设计的系统使用一个消息传递系统来取代SendMessage。 该系统是纯c#和旨在解决与SendMessage存在的一些问题。 使用自定义接口,可以实现系统工作在MonoBehaviour表明组件能够接收一个回调消息传递系统。 当调用目标指定GameObject;所有组件的调用将GameObject实现指定的接口,调用发出。消息传递系统允许自定义用户数据被传递,以及多大程度上通过GameObject层次事件应该传播;这是应该指定GameObject只是执行,或者它也应该执行的孩子和父母。 除了这个消息传递框架提供了辅助函数搜索并发现GameObjects实现给定的消息传递接口。
消息传递系统是通用的,设计用于不仅由UI系统也由一般的游戏代码。 添加自定义消息事件比较简单,他们将使用相同的框架,对所有事件处理UI系统使用。
如何定义一个自定义的消息?
如果你希望定义一个自定义消息是相对简单的。 UnityEngine。 EventSystems名称空间都有一个基本的界面称为“IEventSystemHandler”。 任何从这可以被认为是通过消息传递系统接收事件的目标。public interface ICustomMessageTarget : IEventSystemHandler { // functions that can be called via the messaging system void Message1(); void Message2(); }
一旦定义该接口由MonoBehaviour就可以实现。 当它定义函数实现将如果执行给定的消息发布在此MonoBehaviours GameObject。
public class CustomMessageTarget : MonoBehaviour, ICustomMessageTarget { public void Message1() { Debug.Log ("Message 1 received"); } public void Message2() { Debug.Log ("Message 2 received"); } }
现在存在一个脚本,可以接收消息我们需要发出消息。 通常这是在回应一些松散耦合的事件发生。 例如,在UI系统我们问题事件诸如PointerEnter PointerExit,以及各种其他的事情可以发生在响应用户输入到应用程序中。
静态的助手类发送消息的存在。 作为参数需要一个目标对象的信息,一些特定于用户的数据,和一个映射到特定的函数的函子的消息接口你希望的目标。
ExecuteEvents.Execute<ICustomMessageTarget>(target, null, (x,y)=>x.Message1());
这段代码将执行函数将消息GameObject目标上的任何组件实现ICustomMessageTarget接口。 ExecuteEvents类脚本文档涵盖了其他形式的执行功能,如执行在孩子或父母。
相关文章推荐
- Unity3D判断鼠标向右或向左滑动,响应不同的事件
- Unity配置数据打包与解析
- 查看Unity的GUI样式
- (二十一)unity4.6学习Ugui中文文档-------交互-Supported Events & Raycasters
- unity3d 如何得到当前物体播放的动画
- Unity3D截图并保存任意目录
- Unity3D中Layers和LayerMask解析
- 初学Unity(无法响应的简单原因以及队列的使用)
- unity学习(三)
- 四元数面向对象
- Unity 实时 半透明 阴影 shader
- Unity Motion Blur 运动模糊的实现
- Unity 中实现 打击感的物理
- unity初学(基本的方法)
- Unity 编辑器环境下不能正确加载Android Assetbundle 中的 Shader 解决方法
- Unity3d获取物体的所有子物体对象(child)
- unity car demo解析
- Unity 往复运动的一种计算方法
- Unity Button 动画
- Unity3D学习之Camera