转自: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. js 验证 -身份证等

    js验证身份证: function isIdCard(idCard) { var num = idCard.toLowerCase().match(/\w/g); if (idCard.match(/ ...

  2. Django进阶Admin篇 - admin基本配置

    django admin 是django自带的一个后台app,提供了后台的管理功能. 基础知识点: 一.认识ModelAdmin 管理界面的定制类,如需扩展特定的model界面,需要从该类继承 二.注 ...

  3. ThinkPHP之MVC简析

    MVC是一种设计模式.它强制性的使用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型(Model).视图(View).控制器(Controller),它们各自处理自己的任务. 模 ...

  4. ionic2——开发利器之Visual Studio Code 常用快捷键

    主命令框 F1 或 Ctrl+Shift+P: 打开命令面板.在打开的输入框内,可以输入任何命令,例如: 按一下 Backspace 会进入到 Ctrl+P 模式 在 Ctrl+P 下输入 >  ...

  5. 手机app后台初学

    初学者一看到接口就想到 不是interface.,但是这里不是,这里就是一个URL,app给这个URL传递参数,然后URL返回数据给APP,然后APP就能和服务端联动提供动态数据 举个最简单的例子,用 ...

  6. Context的作用

    context用于访问全局资源 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSta ...

  7. Java IO流读写文件的几个注意点

     平时写IO相关代码机会挺少的,但却都知道使用BufferedXXXX来读写效率高,没想到里面还有这么多陷阱,这两天突然被其中一个陷阱折腾一下:读一个文件,然后写到另外一个文件,前后两个文件居然不 ...

  8. git配置ssh key并从github.com拉取repos

    一.配置ssh key 1. 进入当前用户目录cd ~2. 生成ssh keyssh-keygen -t rsa -C "ABC@qq.com"ABC@qq.com账号必须是你登录 ...

  9. RPi 2B QEMU 模拟树莓派

    /******************************************************************************** * RPi 2B QEMU 模拟树莓 ...

  10. [转载] ffmpeg摄像头视频采集-采集步骤概述并采集一帧视频

    近期由于工作任务,需要开发一个跨平台视频聊天系统,其中就用到了ffmpeg进行采集与编码,网上找了一大堆的资料,虽然都有一些有用的东西,但实在太碎片化了,这几天一直在整理和实验这些资料,边整理,边做一 ...