转自: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事件相关总结的更多相关文章

  1. javascript 事件相关使用总结01

    javascript 事件相关使用总结01 这里总结一下js事件相关的经验. addEventLinstener()介绍 注册事件最基础的函数是这个 target.addEventListener(t ...

  2. Vue 事件相关实例方法---on/emit/off/once

    一.初始位置 平常项目中写逻辑,避免不了注册/触发各种事件 今天来研究下 Vue 中,我们平常用到的关于 on/emit/off/once 的实现原理 关于事件的方法,是在 Vue 项目下面文件中的 ...

  3. js事件相关面试题

    说是面试题,其实也相当于是对js事件部分知识点的一个总结.简单内容一笔带过,了解详情我都给出了参考链接,都是之前写的一些相关文章.JavaScript本身没有事件模型,但是环境可以有. DOM:add ...

  4. js 事件相关 事件处理 封装 事件封装 DOM 0 2 3 级事件

    1.绑定 function(element, type, handler){        if (element.addEventListener) {            element.add ...

  5. js鼠标事件相关知识

    1.mousedown->mouseup依次触发后相当于click事件 2.除了mouseenter和mouseleave外,其它的鼠标事件都是冒泡的 3.mouseover和mouseout事 ...

  6. 如何抓取 framework input 事件相关 log

    出现事件输入相关的问题时, 建议先 followhttp://429564140.iteye.com/blog/2355405来检测对应的设备是否有响应输入 如果没有响应输入,则可能是 driver ...

  7. 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 ...

  8. 螣龙安科:威胁研究——与MAZE勒索软件事件相关的策略,技术和程序

    至少从2019年5月开始,恶意行为者就一直在积极部署MAZE勒索软件.勒索软件最初是通过垃圾邮件和漏洞利用工具包分发的,后来又转移到妥协后进行部署.根据我们在地下论坛中对涉嫌用户的观察以及整个Mand ...

  9. javascript 事件相关

    1.添加事件 >基本注册方式 <button id="info">click me!</button> var span = document.get ...

随机推荐

  1. tensorflow笔记:模型的保存与训练过程可视化

    tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorflow笔记:多层LSTM代码分析 ...

  2. 分享知识-快乐自己:都说新的Arraylist 扩容是(1.5倍+1) 看了1.8的源代码发现不是这么回事

    都说新的Arraylist 扩容是(1.5倍+1) 看了1.8的源代码发现不是这么回事 就用下面这段代码在jdk的三个版本运行看了下效果: import java.lang.reflect.Field ...

  3. 简单的音乐轮播JS

    首先说明一点,此篇文章只是为了回应一些博友的要求,本人并非专业搞js的,所以键盘侠和各路大神如果看到此文还请轻喷或者可以直接关掉页面~ 直接上代码: <div id="myboot&q ...

  4. zend studio 添加xdebug调试php代码

    1.Eclipse下对于大部分语言都提供了调试器接口,自然的对于PHP,Zend已经集成了XDebug调试器,找到Zend中的Preferences->PHP->Debug, 将调试器设置 ...

  5. (http请求+cookie)的交互流程

    如果步骤5携带的是过期的cookie或者是错误的cookie,那么将认证失败,返回至要求身份认证页面. 当前 Cookie 有两个版本:Version 0 和 Version 1.通过它们有两种设置响 ...

  6. C#—序列化(Serialize)和反序列化(NonSerialize)

    (转自:http://www.cnblogs.com/Abel-Zhang/p/Serialize.html) 一.概述 序列化是把对象转变成流.相反的过程就是反序列化. 哪些场合用到这项技术呢? 1 ...

  7. Android移动端网络优化

    介绍下针对移动端的网络优化,不限于 Android,同样适用于 iOS 和 H5 本文为性能优化系列第四篇,目前性能调优专题已完成以下部分: 性能优化总纲——性能问题及性能调优方式 性能优化第四篇—— ...

  8. vsftp中的local_umask和anon_umask

    umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限umask = 022 时,新建的目录 权限是755,文件的权限是 644umask = 077 时,新建的目录 权限 ...

  9. Android数据库代码优化(2) - 从SQLite说起

    从SQLite说起 如果没有SQLite的基础,我们只是从Android封装的SQLite API去学习的话,难免思路会受到限制.所以,我们还是需要老老实实从头开始学习SQLite. 当我们有一身的S ...

  10. 几个Unity3d UI制作的解决方案.

    1.ex2D的渲染机制 (高效的原因) 在以往的2D插件中,渲染方式是每个sprite单独渲染,由Unity负责Dynamic Batching.在新版ex2D中,我们经过严谨的优化实现了独立的dyn ...