UE4中的事件调度器及C++中的使用
来源:互联网 发布:淘宝客服介入会成功吗 编辑:程序博客网 时间:2024/05/18 14:25
事件调度器非常的适合在各个蓝图之间实现通信功能。
当前UE4版本4.8.3。
在蓝图中,事件调度器的作用就像是事件的派发器。通过将事件预先的绑定在事件调度器上,可以让系统
可以在需要时将事件派发给所有已经绑定的事件。
事件调度器的使用
一个比较常见的使用事件调度器的地方,就是关卡蓝图。
关卡蓝图中的很多物体的Actor及其逻辑,如果要脱离关卡蓝图的话会比较难于使用。因此,可以通过将
关卡蓝图中实现好的功能绑定到某个类,例如GameMode的事件调度器上来方便调度。
如下图,在关卡蓝图的BeginPlay中将功能绑定到GameMode上:
然后可以在GameMode的蓝图中,设定定时的调度关卡蓝图上的功能
事件调度器同时支持解绑和解绑全部,以方便对事件调度的逻辑进行进一步的控制。
Delegate
在C++和蓝图混合使用时,使用Blueprint Function Library可以方便的实现蓝图到C++的调用。如果
要实现C++对蓝图的逻辑的话,事件调度机制就非常的方便。
在C++中,与事件调度器对应的是Delegate机制。事实上,Delegate机制的涵盖范围比事件调度器要
大一些。
Delegate机制是一种常见的设计模式,相信做程序的童鞋都比较熟悉。这里不做多余的说明了。
UE4官方对Delegate的翻译名称唯代理。按照类型,分为单播代理和多播代理。其中,多播代理与事件调
度器的功能类似,而单播代理更接近单纯的代理,也就是只能绑定一个执行函数。
要让多播代理像是事件调度器一样使用的话,需要将其定义为Dynamic。对于单播代理也是一样的。
在C++中使用UE4的代理功能,需要使用官方提供的宏进行定义。
DECLARE_DELEGATE_OneParam( DelegateName
, Param1Type )
void Function( <Param1>, <Param2> )DECLARE_DELEGATE_TwoParams( DelegateName
, Param1Type, Param2Type )
void Function( <Param1>, <Param2>, … )DECLARE_DELEGATE_<Num>Params( DelegateName
, Param1Type, Param2Type, … )
<RetVal> Function()DECLARE_DELEGATE_RetVal( RetValType, DelegateName )<RetVal> Function( <Param1> )DECLARE_DELEGATE_RetVal_OneParam( RetValType
, DelegateName, Param1Type )
<RetVal> Function( <Param1>, <Param2> )DECLARE_DELEGATE_RetVal_TwoParams( RetValType
, DelegateName, Param1Type, Param2Type )
<RetVal> Function( <Param1>, <Param2>, … )DECLARE_DELEGATE_RetVal_<Num>Params( RetValType
, DelegateName, Param1Type, Param2Type, … )
针对不同的代理类型,使用不同的宏前缀即可:
多播代理DECLARE_MULTICAST_DELEGATE…动态单播代理DECLARE_DYNAMIC_DELEGATE…动态多播代理DECLARE_DYNAMIC_MULTICAST_DELEGATE…实际使用时,首先要对代理类型进行定义
然后在具体的类,例如GameState中进行具体的声明
这样一来,就可以在需要调用这个代理的地方进行调用了,例如在某个数据生成的地方。
之后,就可以在蓝图中向这个多播代理绑定事件来获得生成的数据了
另附上UE4关于代理(Dalegate)的官方文档:https://docs.unrealengine.com/latest/CHN/Programming/UnrealArchitecture/Delegates/index.html
总结
事件调度器的机制在逻辑实现中非常的方便,尤其是在关卡设计中,可能会比较经常用到。使用中也没有遇
到什么特别需要注意的地方,逻辑很单纯。
转自:http://blog.ch-wind.com/ue4-event-dispatcher-and-delegate/
- UE4中的事件调度器及C++中的使用
- ue4 中的事件分配器(事件调度器)
- 13.UE4中的事件调度(Event Dispatcher)
- UE4之事件调度器
- MySQL中的事件调度器
- VIVE Tracked追踪器在UE4中的使用
- cocos2dx中的调度器
- C#_C#中的事件
- UE4中的数据保存
- 充分利用 UE4 中的噪声
- UE4中的反射机制
- UE4中的帧数控制
- UE4中的C++知识
- UE4中的内存管理
- UE4中的字符串转换
- UE4 代理事件(C++)
- UE4 代理事件(C++)
- redis事件监听及在订单系统中的使用
- 算法分析与设计第十周:384. Shuffle an Array
- 安装及配置Maven环境变量
- 给你的app添加桌面widget
- hdu1175 (BFS)
- 单片机中断
- UE4中的事件调度器及C++中的使用
- Shell 递归多个子目录下的文件cp or mv到同一个目录下
- 问题汇总——Tomcat启动报错
- 改变多个ul下第一个li的样式
- ubuntu14.04安装TensorFlow
- leetcode:Remove K Digits
- web项目中不适用于java.sql.DriverManager描述的JDBC 4.0 Drivers及以后版本连接数据库是不需要用forName()?
- android实现多图片放大缩小的切换
- bwlabel函数