虚幻引擎代码纷繁复杂,一定程度上就是因为从UObject开始架构的这套反射系统,它在带给我们优秀的反射机制的同时,也让代码的阅读及编写有了一定的门槛。而我今天,就是想通过这篇文章的整理,试着踏过这道坎。
说明符关键字是虚幻C++实现反射机制的重要一环,反射系统(或者说虚幻编译系统)通过识别这些说明符来将变量、函数、类等添加到反射系统里,进而可以进一步支持GC、序列化等。本文是系列文章中针对UCLASS、UFUNCTION以及UPROPERTY中的UCLASS中可能会出现的关键字进行整理,主要参考虚幻官方文档中的Gameplay Architecture一章以及源码中ObjectMacros.h。本文的本质也是整理和汉化(可理解化)。
总览表
关键字 | 解释 |
---|---|
ClassGroup | 用于分类,特别是component的分类 |
Within |
拆解
ClassGroup
添加新类 UTestSceneComponent继承自USceneComponent,将ClassGroup设定为“Test”(另一种写法ClassGroup = Test或ClassGroup = (Test))。
此外 meta=(BlueprintSpawnableComponent) 的写法是从元数据的角度表明该类是可以有蓝图进行生成的。
UCLASS( ClassGroup="Test", meta=(BlueprintSpawnableComponent) )
class TESTPRJ_API UTestSceneComponent : public USceneComponent
{
GENERATED_BODY()
// other code
};
编译之后,在蓝图内部的即可在对应分类Test下找到该组件。