简单了解一下Unity 3D Game工具包,首先是工具包中的交互系统(
interactive runtime
)。Unity内本来有一个事件系统GameObject.SendMessage()
。这个事件系统是用反射实现的,虽然使用非常简单方便,但效率很低。工具包使用XXX设计模式
搭建的事件系统。
这个事件系统的核心是一个Dictionary<GameCommandType, List<System.Action>>
,位于Receiver
中
事件注册
Sender
在Reset()
中将字段值设定为Receiver
Handler
在Awake()
中调用Receiver的Register()
方法,将自己的执行函数添加到Dictionary
中去
如何执行
- 首先调用
SendGameCommand.Send()
方法,调用者可以是Unity的各种OnXXX()
函数。Send()
方法内会执行GameCommandReceiver.Receive()
。 - 然后是
Receiver
这边,Receive()
方法会根据传递的事件类型(GameCommandType
枚举)执行对应的委托OnInteractive()
- 最后是
Handler
,实际执行的功能在PerformInteraction()
中,OnInteractive()
会调用它。
重复性控制
- 在
Sender
中设置(bool)oneShot
,(float)coolDown
,lastSendTime
,isTriggered
字段,控制是否能够多次触发
以及多次触发之间的最小时间间隔
- 在Handler中设置相似字段,控制是否能
多次触发
,多次触发的冷却
,以及每次触发之前的延迟(delay)
其他
- 事件类型:枚举
GameCommandType
定义了一系列的事件类型。 - 该事件系统还该出了事件重复性,间隔,延迟等控制。
Receiver
和Handler
都需要绑定在同一个GameObject
上面,Sender
不需要Reset()
:是编辑器模式下运行的脚本。会在脚本绑定在物体上时,或点击脚本右上角的Reset
时运行。常见应用:统一命名,物体绑定。