UE 宏:UFUNCTION()
BlueprintCallable
1 | UFUNCTION(BlueprintCallable) |
通过调用DECLARE_FUNCTION(execTestFunction01)
宏,生成一个名为execTestFunction01
的函数
具体实现:
1 | DEFINE_FUNCTION(ATestCharacter::execTetsFunction01) |
也就是说,一个普通版本的函数被蓝图调用,实际上调用的是一个以exec
开头的代理函数,在这个代理函数内才真正调用类中的对应函数
BlueprintNativeEvent
1 | UFUNCTION(BlueprintNativeEvent) |
当在 C++ 中创建实现的时候是以TestFunction02_Implementation()
实现的,而函数名为TestFunction02()
的函数实现则会被 UBT 和 UHT 生成的代码中实现,而这个版本实现目的是从实现的反射列表中,根据我们这个函数名 TEXT("TestFunction02")
去寻找exec
版本的实现(会有一个注册表,记录着函数名和具体函数地址的映射),这里的exec
版本实现就会调用_Implementation
版本,也即 C++ 中的实现。
如果在蓝图中重写了这个函数,那么就会把这里这个注册表中的映射地址修改为蓝图的版本,从而调用蓝图版本的实现
BlueprintImplementableEvent
CustomThunkFunction
之前提到,给一个函数标记为 UFUNCTION 时,UHT 会自动生成一个对应的execFunction
,但我们可以在宏中标记CustomThunk
,阻止 UHT 生成,而是自己提供实现
1 | UFUNCTION(BlueprintCallable, CustomThunk) |
对于通配符的实现,可以看这个手动将属性添加到 GC
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Fubuki の Donuts!