为什么父类用UFUNCTION()宏修饰的虚函数在子类重写虚函数时不能用UFUNCTION()宏修饰

Override of UFUNCTION in parent class (SlAiEnemyTool) cannot have a UFUNCTION() declaration above it; it will use the same parameters as the original declaration.
在父类(SIAiEnemyTool)中覆盖UFUNCTION不能有UFUNCTIONO声明;它将使用与原始声明相同的参数

我遇到这个问题,把子类的UFUNCTION()宏去掉就可以正常编译了,但是好奇为什么?通过谷歌查了一下,也算明白,但是不是很深(为啥子类不能弄一个优先级,可能涉及到了反射编译吧),后面完全明白了继续补充。

虚幻论坛的解决帖子,里面有解答,不过总结一下就是:

类A: UFUNCTION(BlueprintlmplementableEvent) void SomeFunction0;

继承类A的类B:一个UFUNCTION(BlueprintNativeEvent) void SomeFunctionO;

编译器不知道要在这里创建什么样的蓝图样式的事件,我认为这很混乱。

它从来没有被支持过,反射系统也不会支持它。一旦UFUNCTION在父类中声明,子类将使用相同的参数继承它。
它总是以这种方式工作,但由于某些原因,警告只在UE4的最新版本中停止编译。
为UFUNCTION生成的代码存在于GENERATED_BODYO内部的父类中,这意味着子类继承了它。在子类中声明相同的UFUNCTION是没有意义的。
posted @ 2022-05-18 17:13  hellogiao1  阅读(816)  评论(0)    收藏  举报