自定义事件、函数与宏是UE蓝图中实现功能的三种方式,本文对这三种方式的特点与使用场景进行总结
文章目录
- 自定义事件
- 函数
- 宏
- 进阶
- 触发与调用
- 函数的访问权限
- 纯函数(Pure function)
- 参考资料
自定义事件
事件(Events) 是从游戏性代码中调用的节点,其使得蓝图执行一系列操作,蓝图本身会存在一些UE声明好的事件,比如 BeginPlay
、Tick
、Destroyed
,通过对这些事件的实现,我们可以在对应事件发生的时候执行我们定义好的逻辑。
除了系统声明好的事件,我们也可以自己在蓝图中声明并定义事件,即自定义事件。比如下面我们定义了一个屏幕打印字符串的事件。
然后在其他事件中可以调用我们的自定义事件,比如在Begin Play
中调用CS_Print
,那么在游戏开始的时候该蓝图类实例就会输出Hello
。
自定义事件是可以有输入的,我们在 Detail
界面可以看到 Inputs
属性,我们给 CS_Print
添加一个String
类型的输入
相应地更改下CS_String
的实现
那么在触发该事件时,需要传入相应的字符串类型的参数,比如这里的 123
函数
这里的函数也是一个执行的逻辑,感觉更像是类中的方法,子类可以重写父类的函数,比如继承于 Actor
类的子类,有18个可以重写的函数。
和自定义事件不同的是,函数既可以有输入,也可以有输出,比如我们定义一个 F_Int2Str
函数,传入一个数,传出该数对应的字符串。
我们可以在事件/函数中调用函数,也可以在函数中调用自定义事件。
宏
宏也可以有多个输入和输出,但相较于函数,宏的输入和输出的类型可以是执行引脚,也就是说函数固定只有一个执行引脚,而宏可以有多个(也可以是0个)。
比如蓝图中的 For Each Loop
就有两个输出执行引脚,分别表示循环体内部的执行以及循环结束后的执行。
进阶
上面的内容简单地介绍了自定义事件、函数与宏的使用,下面的部分属于进阶内容。
触发与调用
自定义事件与函数和宏的一个区别在于,自定义事件可以看作是触发,函数与宏可以看作是调用。触发的意思是在一个事件的执行流程中,我们触发了一个自定义事件,那么自定义事件并不会阻塞我们后续的执行流程,也就是说触发的自定义事件和触发的事件后面的执行流程是并行的。
而对于函数和宏,我们是调用,也就是说只有执行完函数和宏内部的执行流程才会执行调用函数和宏后面的执行流程。
这里我们用一个例子进行验证,在宏和自定义事件中延迟3s(这里需要补充的是函数内部不能使用delay),而在触发/调用自定义事件和宏后续的执行流程是输出一个Hello
宏的执行结果
自定义事件的执行结果
可以看到宏后面的输出是延迟了3s后才打印Hello
,而自定义事件是直接就打印Hello
了。
函数的访问权限
蓝图中的函数也有相应的访问权限设置,这里的与C++中类的访问权限一致,Public就是可以在类外访问,Protected表示仅可以在类内和子类内访问,Private表示仅在类内可访问
纯函数(Pure function)
蓝图中函数可设置为纯函数,仅需勾选上 Pure
纯函数没有执行引脚,所以一般要有输出引脚,否则也没法在执行流程中调用,纯函数一般用于返回类的成员/状态,且一般不会去改变类的成员/状态。
比如下面我们定义了一个返回类中Name
成员的纯函数
那么我们可以在Tick
事件中调用
执行结果
参考资料
【虚幻引擎5教程】电子沙盘+大语言模型:S01E02_蓝图入门
【虚幻5基础课堂】1. 一个案例了解事件与宏运行机制_UE5_UnrealEngine