UE5——反射数据1

GENERATED_BODY()

第一次展开

GENERATED_BODY(…) BODY_MACRO_COMBINE(CURRENT_FILE_ID, _, LINE, _GENERATED_BODY);

第二次展开

BODY_MACRO_COMBINE(A,B,C,D) BODY_MACRO_COMBINE_INNER(A,B,C,D)

第三次展开

BODY_MACRO_COMBINE_INNER(A,B,C,D) A##B##C##D

参数
CURRENT_FILE_ID:
UE5——反射数据1_第1张图片
LINE:代表的是GENERATED_BODY()再第几行的意思

最后拼接成FID_ReflexProject_Source_ReflexProject_MyObject_h_15_GENERATED_BODY
UE5——反射数据1_第2张图片
PRAGMA_DISABLE_DEPRECATION_WARNINGS //禁用警告
PRAGMA_ENABLE_DEPRECATION_WARNINGS //启用警告

这个 FID_ReflexProject_Source_ReflexProject_MyObject_h_15_SPARSE_DATA 是空的先不用管它
这个 FID_ReflexProject_Source_ReflexProject_MyObject_h_15_RPC_WRAPPERS_NO_PURE_DECLS 也是空的先不用管

这个 FID_ReflexProject_Source_ReflexProject_MyObject_h_15_INCLASS_NO_PURE_DECLS 展开
在这里插入图片描述
这个 FID_ReflexProject_Source_ReflexProject_MyObject_h_15_ENHANCED_CONSTRUCTORS 展开
UE5——反射数据1_第3张图片

下面FID_ReflexProject_Source_ReflexProject_MyObject_h_15_INCLASS_NO_PURE_DECLS 这个里面的宏继续展开

static void StaticRegisterNativesAMyActor();

///注册C++原生函数以便暴露给蓝图虚拟机使用

friend struct Z_Construct_UClass_AMyActor_Statics;

为了构建对应的UClass ,是一个辅助结构

DECLARE_CLASS(UMyObject, UObject, COMPILED_IN_FLAGS(0), CASTCLASS_None, TEXT(“/Script/ReflexProject”), NO_API)展开

参数
UMyObject: 是自己的类名
UObject:继承的父类
COMPILED_IN_FLAGS(0):类的属性标记

enum EClassFlags
{
	/** 没有标记 */
	CLASS_None				  = 0x00000000u,
	/** 类是抽象的,不能直接实例化 */
	CLASS_Abstract            = 0x00000001u,
	/** 只将对象配置保存到默认INI,从不保存到本地INI。必须与CLASS_Config组合使用 */
	CLASS_DefaultConfig		  = 0x00000002u,
	/** 构造时加载对象配置 */
	CLASS_Config			  = 0x00000004u,
	/** 无法保存此对象类型,保存是将其清空 */
	CLASS_Transient			  = 0x00000008u,
	/** 此对象类型在某些上下文中可能不可用。(即游戏运行时或在特定配置中)。可选的类数据分别保存到其他对象类型。(即可能使用sidecar文件) */
	CLASS_Optional            = 0x00000010u,
	/** */
	CLASS_MatchedSerializers  = 0x00000020u,
	/** 指示此类的配置设置将保存到Project/User*.ini(类似于class_GlobalUserConfig) */
	CLASS_ProjectUserConfig	  = 0x00000040u,
	/** 类是本机类-本机接口将设置Class_native,但不设置RF_MarkAsNative */
	CLASS_Native			  = 0x00000080u,
	/** 不导出到C++标头. */
	CLASS_NoExport            = 0x00000100u,
	/** 不允许用户在编辑器中创建 */
	CLASS_NotPlaceable        = 0x00000200u,
	/** 基于每个对象而不是每个类来处理对象配置. */
	CLASS_PerObjectConfig     = 0x00000400u,
	
	/** 是否仍然需要为该类调用SetUpRuntimeReplicationData */
	CLASS_ReplicationDataIsSetUp = 0x00000800u,
	
	/** 类可以从editinline New button构造 */
	CLASS_EditInlineNew		  = 0x00001000u,
	/** 在编辑器中显示属性而不使用类别. */
	CLASS_CollapseCategories  = 0x00002000u,
	/** 类是接口 **/
	CLASS_Interface           = 0x00004000u,
	/**  不要为这个类导出构造函数,假设它在cpptext**/
	CLASS_CustomConstructor   = 0x00008000u,
	/**该类中的所有属性和函数都是const,应该导出为const */
	CLASS_Const			      = 0x00010000u,

	/** 类标志,指示该类的对象需要延迟依赖项加载 */
	CLASS_NeedsDeferredDependencyLoading = 0x00020000u,
	
	/** 表明该类是从蓝图源材质创建的 */
	CLASS_CompiledFromBlueprint  = 0x00040000u,

	/** 表明 这只是这个类的最小值DLL应该导出/导入 */
	CLASS_MinimalAPI	      = 0x00080000u,
	
	/** 指示该类必须被DLL导出/导入(以及它的所有成员) */
	CLASS_RequiredAPI	      = 0x00100000u,

	/** 指示对该类的引用默认为实例化。以前是UComponent的子类,但现在可以是任何UObject */
	CLASS_DefaultToInstanced  = 0x00200000u,

	/** 指示父令牌流已与我们的令牌流合并 */
	CLASS_TokenStreamAssembled  = 0x00400000u,
	/** 类具有组件属性 */
	CLASS_HasInstancedReference= 0x00800000u,
	/** 不要在编辑器类浏览器中显示该类或编辑内联新菜单。 */
	CLASS_Hidden			  = 0x01000000u,
	/** 序列化时不要保存该类的对象 */
	CLASS_Deprecated		  = 0x02000000u,
	/**类未显示在编辑器下拉列表中用于类选择 */
	CLASS_HideDropDown		  = 0x04000000u,
	/** 类设置保存到/..../Blah.ini(相对于CLASS_DefaultConfig) */
	CLASS_GlobalUserConfig	  = 0x08000000u,
	/** 类是直接在c++中声明的,没有由UnrealHeaderTool生成的样板 */
	CLASS_Intrinsic			  = 0x10000000u,
	/** 类已经构造(可能在热重载之前的以前的DLL版本中) */
	CLASS_Constructed		  = 0x20000000u,
	/** 指示对象配置在序列化时不会检查ini base/defaults */
	CLASS_ConfigDoNotCheckDefaults = 0x40000000u,
	/** 类作为蓝图重新编译的一部分已被遗忘,目前存在一个更新的版本. */
	CLASS_NewerVersionExists  = 0x80000000u,
};

CASTCLASS_None:该类转换成哪些类

enum EClassCastFlags : uint64
{
	CASTCLASS_None = 0x0000000000000000,

	CASTCLASS_UField						= 0x0000000000000001,
	CASTCLASS_FInt8Property					= 0x0000000000000002,
	CASTCLASS_UEnum							= 0x0000000000000004,
	CASTCLASS_UStruct						= 0x0000000000000008,
	CASTCLASS_UScriptStruct					= 0x0000000000000010,
	CASTCLASS_UClass						= 0x0000000000000020,
	CASTCLASS_FByteProperty					= 0x0000000000000040,
	CASTCLASS_FIntProperty					= 0x0000000000000080,
	CASTCLASS_FFloatProperty				= 0x0000000000000100,
	CASTCLASS_FUInt64Property				= 0x0000000000000200,
	CASTCLASS_FClassProperty				= 0x0000000000000400,
	CASTCLASS_FUInt32Property				= 0x0000000000000800,
	CASTCLASS_FInterfaceProperty			= 0x0000000000001000,
	CASTCLASS_FNameProperty					= 0x0000000000002000,
	CASTCLASS_FStrProperty					= 0x0000000000004000,
	CASTCLASS_FProperty						= 0x0000000000008000,
	CASTCLASS_FObjectProperty				= 0x0000000000010000,
	CASTCLASS_FBoolProperty					= 0x0000000000020000,
	CASTCLASS_FUInt16Property				= 0x0000000000040000,
	CASTCLASS_UFunction						= 0x0000000000080000,
	CASTCLASS_FStructProperty				= 0x0000000000100000,
	CASTCLASS_FArrayProperty				= 0x0000000000200000,
	CASTCLASS_FInt64Property				= 0x0000000000400000,
	CASTCLASS_FDelegateProperty				= 0x0000000000800000,
	CASTCLASS_FNumericProperty				= 0x0000000001000000,
	CASTCLASS_FMulticastDelegateProperty	= 0x0000000002000000,
	CASTCLASS_FObjectPropertyBase			= 0x0000000004000000,
	CASTCLASS_FWeakObjectProperty			= 0x0000000008000000,
	CASTCLASS_FLazyObjectProperty			= 0x0000000010000000,
	CASTCLASS_FSoftObjectProperty			= 0x0000000020000000,
	CASTCLASS_FTextProperty					= 0x0000000040000000,
	CASTCLASS_FInt16Property				= 0x0000000080000000,
	CASTCLASS_FDoubleProperty				= 0x0000000100000000,
	CASTCLASS_FSoftClassProperty			= 0x0000000200000000,
	CASTCLASS_UPackage						= 0x0000000400000000,
	CASTCLASS_ULevel						= 0x0000000800000000,
	CASTCLASS_AActor						= 0x0000001000000000,
	CASTCLASS_APlayerController				= 0x0000002000000000,
	CASTCLASS_APawn							= 0x0000004000000000,
	CASTCLASS_USceneComponent				= 0x0000008000000000,
	CASTCLASS_UPrimitiveComponent			= 0x0000010000000000,
	CASTCLASS_USkinnedMeshComponent			= 0x0000020000000000,
	CASTCLASS_USkeletalMeshComponent		= 0x0000040000000000,
	CASTCLASS_UBlueprint					= 0x0000080000000000,
	CASTCLASS_UDelegateFunction				= 0x0000100000000000,
	CASTCLASS_UStaticMeshComponent			= 0x0000200000000000,
	CASTCLASS_FMapProperty					= 0x0000400000000000,
	CASTCLASS_FSetProperty					= 0x0000800000000000,
	CASTCLASS_FEnumProperty					= 0x0001000000000000,
	CASTCLASS_USparseDelegateFunction			= 0x0002000000000000,
	CASTCLASS_FMulticastInlineDelegateProperty	= 0x0004000000000000,
	CASTCLASS_FMulticastSparseDelegateProperty	= 0x0008000000000000,
	CASTCLASS_FFieldPathProperty			= 0x0010000000000000,
	CASTCLASS_FObjectPtrProperty			= 0x0020000000000000,
	CASTCLASS_FClassPtrProperty				= 0x0040000000000000,
	CASTCLASS_FLargeWorldCoordinatesRealProperty = 0x0080000000000000,
};

TEXT(“/Script/ReflexProject”):类所处于的包名 表示该脚本逻辑在PluginCore里面(包括C++ 和 蓝图)
NO_API: 最终会编译为exe 所以不需要导出宏
UE5——反射数据1_第4张图片

DECLARE_SERIALIZER(UMyObject) 展开

UE5——反射数据1_第5张图片

FID_ReflexProject_Source_ReflexProject_MyObject_h_15_ENHANCED_CONSTRUCTORS这个里面的宏继续展开

DECLARE_VTABLE_PTR_HELPER_CTOR(NO_API, UMyObject); 这个展开

在这里插入图片描述

DEFINE_VTABLE_PTR_HELPER_CTOR_CALLER(UMyObject); 这个展开

在这里插入图片描述

DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UMyObject); 这个展开

UE5——反射数据1_第6张图片



你可能感兴趣的:(UE4,ue5,c#)