UE的UCLASS宏和GENERATED_BODY()宏

UCLASS宏用于标记UObject的派生类。

例如:
UCLASS(BlueprintType, Blueprintable, config=Engine, meta=(ShortTooltip="An Actor is an object that can be placed or spawned in the world."))
class UMyObject : public UObject
{
    GENERATED_BODY()
}

UCLASS()括号中可选的说明符

说明符 说明
Abstract 注明这个类是抽象类,可以阻止用户通过“拖拽”的方式向场景里添加这个类的Actor
Blueprintable 可以被蓝图类继承,该说明符会传递给派生类
NotBlueprintable 不可被蓝图类继承,该说明符会传递给派生类
BlueprintType 可用于蓝图的变量类型
Config=ConfigName 指定默认的配置文件
Placeable 可通过编辑器将此类放置到关卡、UI以及蓝图中,可继承
NotPlaceable 不可通过编辑器将此类放置到关卡、UI以及蓝图中,可覆盖基类中的Placeable

mata=后面的说明符

元数据说明符 说明
DisplayName="Blueprint Node Name" 蓝图中的节点名
ChildCanTick 用于Actor和Component类。如果host不能勾选,则基于此参与者或组件的蓝图类可以覆盖bCanEverTick标记,即使bCanBlueprintsTickByDefault是false。
ChildCannotTick 用于Actor和Component类。如果host不能勾选,基于此Actor或Component的蓝图类永远不会勾选,即使bCanBlueprintsTickByDefault为true

 

GENERATED_BODY宏给一个简单的自定类加了下面这些东西:

  1. 添加了一个静态函数static void StaticRegisterNativeUMyObject();
  2. 声明结构体struct Z_Construct_UClass_UMyObject_Statics;为friend
  3. 添加了一个public构造函数UMyObject(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());
  4. 通过声明private: UMyObject(UMyObject&&); UMyObject(const UMyObject&&);禁用move和copy
  5. 通过声明private: UMyObject& operator=(UMyObject&&); UMyObject& operator=(const UMyObject&&);禁用赋值动作
  6. 增加一个静态函数static UClass* GetPrivateStaticClass();
  7. 内部枚举enum {StaticClassFlags=};
  8. 内部类型定义Super,表示父类
  9. 内部类型定义ThisClass,表示该类的UClass对象
  10. 添加静态函数staic UClass* StaticClass();,用来返回当前类的UClass对象
  11. 添加静态函数static const TCHAR* StaticPackage();,返回当前类所属的包名
  12. 添加静态函数inline static EClassCastFlags StaticClassCastFlags(),放回当前类静态转型标记
  13. 重载operator new函数(如果有机会后面分享到UE4对象的内存管理在来详细分析)

你可能感兴趣的:(UE5学习笔记,UE)