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对象的内存管理在来详细分析)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值