UE4事件相关总结
转自:http://blog.ch-wind.com/ue4-event-overview/
事件机制是实现游戏内逻辑的重要部分,在开始进行游戏逻辑的设计和实现之前,对UE4的事件机制进行理解是非常必要的。于是在这里对UE4的事件相关内容全部整理一下。
当前使用的UE版本是4.6.0。
UE4的内置事件
– Event Level Reset
这个事件如其名称,只存在于Level Blueprint。只能在服务端运行。
事件发出在关卡被重置时,例如玩家死亡后地图没有重新载入而是重置的情况。
– 碰撞检测系列
Event Actor Begin Overlap
Event Actor End Overlap
Event Hit
Overlap事件仅在两个物体的碰撞属性为Overlap且勾选了Generate Overlap Events时才会发生。而Hit事件则必须有Simulation Generates Hit Events的设置才会发出。碰撞检测事件是游戏逻辑的一个重要的触发点。
– 伤害事件
Event Any Damage
由环境等因素造成的附加伤害,例如持续性伤害的沼泽地。
Event Point Damage
点伤害,是由抛物体引起的伤害。通常用于子弹的伤害以及某些近战武器。
Event Radial Damage
辐射状伤害,通常应用于爆炸伤害或其他的间接伤害类型。
伤害事件只在服务器端发起。
– 交互事件
Event Actor Begin Cursor Over
Event Actor End Cursor Over
如其名字所描述的鼠标和物体的交互事件。
– 逻辑事件
Event Begin Play
Event End Play
比较经常用到的两个事件,在Actor于世界中初始化和被消去时触发。
Event Destroyed
当Actor被销毁时触发,这个事件已经被官方标记了,功能合并到了End Play中。
Event Tick
时钟事件,每一帧都会触发。
Event Receive Draw HUD
只有在Hud类中才有的事件,可以用于Hud的逻辑和显示设计。
碰撞检测相关
碰撞的逻辑和射线追踪使用的逻辑是大体相同的。唯一不同的是追踪扫描线本身也可以拥有响应属性,使得物体可以选择是否阻挡或者忽略这条扫描线。
一些比较重要的属性包括:
CCD
连续碰撞检测。提高碰撞检测的精度,用于防止穿墙和防止二次碰撞。通常在高速移动物体例如子弹的模拟中会用到。
Always Create Physics State
在世界载入时而不是碰撞发生时创建物理属性,可以防止游戏运行中突发的大量物理属性初始化引起的卡顿,代价是载入时间的变长。
Check Async Scene on Move
同时检查同步物理空间和异步物理空间,异步物理空间主要被用于可破坏物体被破坏后的模拟。
Trace Complex on Move
如果使用复杂追踪,则将采用多边形级的模拟。通常采用简单模拟,碰撞图形可以在编辑器中定义。
碰撞属性的优先如下:
Ignore>Overlap>Block
只有在两个参与模拟的物体具有相同的属性时才会触发相应的逻辑,否则采用优先级高的碰撞逻辑。例如两个物体相互的碰撞设置为overlap和block,则会被判定为overlap。
对于场景中的高速移动物体,即时设定了Block有时也会触发Overlap事件,所以并不建议同时使用这两种类型的事件。
更多的实例可以参考官方文档。
蓝图通信相关
自定义事件
UE4允许在蓝图中自定义事件。事件的定义只在该蓝图内部有效。
自定义事件的使用方法基本和自定义函数相同。
事件调度器
事件调度器会在被调用后触发所有绑定在其上的事件。
可以绑定、解绑、解绑所有事件,同时如果定义的事件不绑定的话那么就不会被调度器调用。
蓝图接口
蓝图接口可以使得不同的物体类型提供相同的功能但是拥有各自的实现,和C++的接口功能类似。在蓝图中定义时没什么太大的问题,唯一需要留意的是对于没有输出的函数会被自动在转化为事件。如下图:
如果要在C++中使用,则需要参考文档进行。
MinimalAPI
尽量的不向外暴露内部的函数。在这个情况下,可以通过为函数指定RequiredAPI来将其暴露出去。虽然官方是这么说明的,但是RequiredAPI的使用方式不明,直接使用会提示错误,有可能是包含问题。Function Specifiers中亦没有说明,手上也没UE4的源码,由于不太可能用到这个设定所以不再研究。
DependsOn
声明依赖关系。当接口要使用到别的类中的定义时需要用到。
DependsOn=(ClassName, Classname, …)
CannotImplementInterfaceInBlueprint
蓝图不能实现的接口,该接口只能在C++中实现。使用了这个指定之后,不能在接口中将函数指定为BlueprintImplementableEvent。相对的,在没有指定亦即可以被蓝图实现的接口中不能使用BlueprintCallable。
UINTERFACE(…, meta = (CannotImplementInterfaceInBlueprint))
需要注意的是,定义的接口不能暴露属性同时如果不使用CannotImplementInterfaceInBlueprint的话也无法将函数暴露给蓝图。功能上真的就只是一个单纯的接口。
————
UE4事件相关总结的更多相关文章
- javascript 事件相关使用总结01
javascript 事件相关使用总结01 这里总结一下js事件相关的经验. addEventLinstener()介绍 注册事件最基础的函数是这个 target.addEventListener(t ...
- Vue 事件相关实例方法---on/emit/off/once
一.初始位置 平常项目中写逻辑,避免不了注册/触发各种事件 今天来研究下 Vue 中,我们平常用到的关于 on/emit/off/once 的实现原理 关于事件的方法,是在 Vue 项目下面文件中的 ...
- js事件相关面试题
说是面试题,其实也相当于是对js事件部分知识点的一个总结.简单内容一笔带过,了解详情我都给出了参考链接,都是之前写的一些相关文章.JavaScript本身没有事件模型,但是环境可以有. DOM:add ...
- js 事件相关 事件处理 封装 事件封装 DOM 0 2 3 级事件
1.绑定 function(element, type, handler){ if (element.addEventListener) { element.add ...
- js鼠标事件相关知识
1.mousedown->mouseup依次触发后相当于click事件 2.除了mouseenter和mouseleave外,其它的鼠标事件都是冒泡的 3.mouseover和mouseout事 ...
- 如何抓取 framework input 事件相关 log
出现事件输入相关的问题时, 建议先 followhttp://429564140.iteye.com/blog/2355405来检测对应的设备是否有响应输入 如果没有响应输入,则可能是 driver ...
- UE4 Pak 相关知识总结
转载自:https://arcecho.github.io/2017/07/02/UE4-Pak-%E7%9B%B8%E5%85%B3%E7%9F%A5%E8%AF%86%E6%80%BB%E7%BB ...
- 螣龙安科:威胁研究——与MAZE勒索软件事件相关的策略,技术和程序
至少从2019年5月开始,恶意行为者就一直在积极部署MAZE勒索软件.勒索软件最初是通过垃圾邮件和漏洞利用工具包分发的,后来又转移到妥协后进行部署.根据我们在地下论坛中对涉嫌用户的观察以及整个Mand ...
- javascript 事件相关
1.添加事件 >基本注册方式 <button id="info">click me!</button> var span = document.get ...
随机推荐
- ps切图步骤
1.复制图层到新建 2.alt + i + r 裁剪 依次按 3.ctrl + alt + shift + s 保存 裁剪图标 复制到图层 , 删除背景,并复制样式 就可以做到 背景透明.
- 关于mongodb删除集合后磁盘空间不释放的问题
mongodb删除集合后磁盘空间不释放,只有用db.repairDatabase()去修复才能释放. 但是在修复的过程中如果出现了非正常的mongodb的挂掉,再次启动时启动不了的,需要先修复才可以, ...
- spring3: AOP 之代理机制
Spring AOP通过代理模式实现,目前支持两种代理:JDK动态代理.CGLIB代理来创建AOP代理,Spring建议优先使用JDK动态代理. JDK动态代理:使用java.lang.reflect ...
- javascript HTML DOM 简单介绍
JavaScript HTML DOM通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素.HTML DOM (文档对象模型)当网页被加载时,浏览器会创建页面的文档对象模型( ...
- uva 10891 区间dp+记忆化搜索
https://vjudge.net/problem/UVA-10891 给定一个序列x,A和B依次取数,规则是每次只能从头或者尾部取走若干个数,A和B采取的策略使得自己取出的数尽量和最大,A是先手, ...
- git一个系列教程
https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%8 ...
- 2017.10.31 Enginer+position+statement
一.The basic information Post name Engineering manager Department Engineering Post member A24645 imme ...
- 你不知道的sticky
position:sticky,Chrome新版本已经做了支持.sticky的中文翻译是“粘性的”,position:sticky表现也符合这个粘性的表现.基本上,可以看出是position:rela ...
- Intellij IDEA带参数启动Springboot注意事项
问题 不同版本的spring-boot-maven-plugin的jvm参数配置有所不同,同时与通过main方法启动springboot程序传递参数也有所不同. 分析 在运行main方法时,可以通过j ...
- ActiveReports报表控件V11 SP1版本正式发布!
无需编码,即可轻松搞定商业报表六大需求的 ActiveReports 报表控件,于今日宣布正式发布 V11 SP1 版本,并在其 官方网站 提供免费下载. V11 版本是 ActiveReports ...