UE4 HTC VIVE - 番外篇 - 事件系统
目的:
一定程度上解耦,对象化,消息分发等等
使用方法:
1)创建一个一定范围内使用的事件管理器
2)明确对象职能,并结合其他模块需求分析构建何种格式的事件
3)创建完整的事件注册和注销闭环
4)编写逻辑与事件触发和调用
UE4事件系统的主要两个组成
1)自定义事件
2)事件调度器
第一步:自定义事件的创建和使用:
a,首先创建出一个自定义事件
添加自定义事件.png
b,尝试调取自己创建的事件(走神提示:把蓝图扔到场景里不然你啥也看不到)
调用自定义事件.pngc,外部调用和创建有参数的事件
创建有参数的自定义事件.pngd,在场景蓝图中触发自定义事件
在场景蓝图中调用自定义事件.png第二步:事件调度器的创建和使用
拟定一个 事件分发 情景场景:
A吼一嗓子,B和C听到吓一跳
如何确定何时需要使用事件分发机制:
来分析一下情景
1,A吼叫后与其再无关系,并且能被所有听力正常的生物听到,形成一对多事件触发条件;
2,B,C属于听力正常的生物,那么需要在出现声音的时候及时获取内容并进行各自对应的应激反应,所以在B,C出生的时候都要注册进听声音事件形成听众;
使用情景:
一起事件对多种响应的需求时,使用事件列队来完成分发操作;
具体实现:
首先创建一个GameModle 类型作为方便获取的媒介,然后创建一个新的事件调度器
创建事件调度器B,C的处理
首先来看B,C,B和C作为正常生物在出生时需要将自身听声音事件注册到消息列队,并且在听到声音后做了相应的实现;
其中假设C适应力较差导致耳聋,将不再需要听声音,就将C的听声音事件从消息列队中剔除;
A的处理
A需要做的就是按一定频率不多吼叫,即定时触发事件列队的消息发送;
A的蓝图将A,B,C三个对象放入场景中,显示结果为:
由此可见B,C均接到到事件调用,并且C也在第一调用完后成功将自身事件从列队中剔除;
执行现象
第二步拓展:在场景蓝图中操作事件
我们即将使用手动调用的方式来触发吼叫,所以将A的吼叫计时器给关掉即可
断开A的吼叫计时器 创建临时消息列队
引出CreateEvent节点
当BingEvent to xxxx节点的事件先与CreateEvent的Event节点连接后出现selectEvent下拉菜单,我们从中选择吼叫事件来作为触发目标事件;
将事件绑定
运行结果同步骤二,此处不截图了
第三部制作一个简单的模式切换功能(最后附实例下载)
思路:
1)控制器接收目标模式后关闭当前模式,并加载目标模式
2)控制模式在各个事件列队的注册和卸载,确保不出现空的事件引用
具体实现内容:
1)玩家输入鼠标左键切换游戏模式
2)玩家输入键盘按键内容将附加模式名称以标识当前模式
创建基础模式类 创建具体模式对象 子类复写父类事件时可以主动调用父类来保留父类实现 模式01蓝图 模式02蓝图 将模式蓝图放入角色控制器 在角色控制器中写入鼠标输入事件 继续在角色控制器中编写一段按键输入事件
附此实例蓝图下载地址:
http://pan.baidu.com/s/1gfAxOyR