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:
LINE:代表的是GENERATED_BODY()再第几行的意思
最后拼接成FID_ReflexProject_Source_ReflexProject_MyObject_h_15_GENERATED_BODY
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 展开
///注册C++原生函数以便暴露给蓝图虚拟机使用
为了构建对应的UClass ,是一个辅助结构
参数
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 所以不需要导出宏