UE5中关于使用BlueprintPure需要注意的问题
前言
函数说明符BlueprintPure用于配合UFUNCTION完成函数标记,对函数进行行为补充说明,主要意图提供不带有白色执行引脚的函数给蓝图使用。可以查看下官方说明文档(点击这里,大家看英文注释更清晰,中文被偷工减料了)
操作目的:在蓝图中,将标记的函数去掉白色执行引脚,可以将调用的节点不“直接引入执行逻辑线”中,从而让蓝图执行逻辑看起来更加整洁。
蓝图中
要隐藏执行引脚,在蓝图中需要将函数的细节面板中勾选“纯函数”
C++中
将函数说明中添加“BlueprintPure”或是函数是常函数都可以隐藏执行引脚
c++
|
|
总结问题
- 由于纯函数缺少执行引脚,调用纯函数采用规则是:将输出执行线连接到在执行逻辑中的节点上,故纯函数需要有返回值,即需要有输出引脚
- C++中如果标记了BlueprintPure的函数没有返回值,编译将出错(BlueprintPure specifier is not allowed for functions with no return value and no output parameters.)
- 蓝图中的函数可以不带有返回值,勾选纯函数,但是在图表中调用函数将无法加入执行逻辑线
- 对于纯函数蓝图中使用,函数本身执行次数需要注意的情况
- 如果在一个执行节点,有多个输入引脚,每个引脚都连接相同的纯函数,则纯函数只调用一次
- 如果在一条执行逻辑线上,多个节点,分别输入多次同一个纯函数,则函数调用多次
关于调用次数问题,纯函数与普通函数有些区别
普通函数输出引脚被多次连接却只执行一次规则很简单:
- 在白色执行线上,只要有连接执行节点就会执行一次节点调用逻辑,至于该节点输入时关联了多个函数,每个函数都只执行一次(图a),即时该函数被多次输入连接,也只执行一次。
- 而如果函数被不同的执行线节点调用,则该节点也会被多次调用(图b)。
- 对于非纯函数的函数,执行过后有输出值,输出值被连接多少次,都不会促使函数执行(因为执行已经通过,不会逆向执行 图c)
结语
纯函数使用时,切记关于调用次数的问题。例如写的工厂方法,生产对象,如果将工厂方法标记为纯函数,千万注意在执行逻辑线中多次调用会多次生成对象。
Tags: