GENERATED_BODY宏定义在头文件: Engine\Source\Runtime\CoreUObject\Public\UObject\ObjectMacros.h 中。 下面是该文件的部分代码: // This pair of macros is used to help implement GENERATED_BODY() and GENERATED_USTRUCT_BODY()#define BODY_MACRO_COMBINE_INNER(A,B,C,D) A##B##C##D#define BODY_...
GENERATED_BODY 如果使用这个宏,表示不会使用父类的构造函数,不能直接使用父类的声明。必须自己声明默认的构造函数。 GENEATED_UCLASS_BODY 这个表示你会使用父类的构造函数,且不需要在.h声明构造函数,在.cpp中实现即可 ClssName::ClssName(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) {...
GENERATED_UCLASS_BODY(): 如果定义的是GENERATED_UCLASS_BODY(),那么意味着我使用父类的构造函数,也就是说,我不需要为自己声明构造函数,直接去实现父类声明那个构造函数,那么在CPP文件中去实现,而不需要在H里面去声明。 总结:属于之前版本的宏,自动生成带有指定参数的构造函数,不用用户再头文件中生明构造函数,需...
这句前面。这句必须是所有#include的最后一个,否则报错找不到GENERATED_BODY。 CrimsonDark 默默无闻 1 确实是因为GENERATED_BODY()的行数变了就会报错因为在ClassName.generated.h中是依赖GENERATED_BODY()的行数的只要把ClassName.generated.h中所有的h_12改成当前GENERATED_BODY()所在行数的数字就不会报错了。
一、GENERATED_BODY() 如果定义的是GENERATED_BODY(),那么意味着我不需要使用父类的构造函数,也就是说,我不能直接使用父类的声明,但是,我需要去实现的时候,我就必须自己去声明,否则就会报错。 然后就可以在CPP中实现自己声明的这个构造函数,编译通过。
腾讯游戏学院-深入理解UE4宏定义—GENERATED_BODY 类结构 下图来自虚幻官方文档 - UMG 最佳实践。 通常,我们推荐遵循以下模式的架构: UMyData是一个继承自 UObject 的 C++ 类。 创建一个数据类来封装 UI 试图传达给用户的所有信息。 作为一个 UObject,它具有公共/私有访问控制,具有 getter 和 setter,并包含一个...
这样说来,GENERATED_BODY在函数中的作用就是一个宏定义。 也就是说:CollidingPawnMovementComponent.h的头文件类声明说这样来代替: 声明一下,这样写UE4 的编译机制编译不过。 因为在HeaderParse.cpp中的4869行和4875行, 有这样的判断: FError::Throwf(TEXT("Expected a GENERATED_BODY() at thestartofclass"))...
GENERATED_BODY() public: virtual void Action() override { UE_LOG(LogTemp, Warning, TEXT(__FUNCTION__" 传送到下一个场景")); } }; // 具体接收者类 Receiver —— 资料片播放 UCLASS() class DESIGNPATTERNS_API UCutscene : public UCmdReceiver ...
GENERATED_BODY() public: // 定义一个可反射的函数 UFUNCTION(BluprintCallable) void MyFunc(); private: // 定义一个可反射的变量 UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess = "true")) int MyIntValue; } 反射类型结构总览 ...