虚幻引擎反射系统
使用宏提供引擎和编辑器各种功能,封装你的类。使用虚幻时,可以使用标准的C++类,函数和变量
虚幻中对象的基类是UObject,UCALSS宏的作用是标记UObject的子类,以便UObject处理系统可以识别他们
UObject创建
1.不支持构造器参数。所有的C++ UObject都会在引擎启动的时候初始化,然后引擎会调用其默认构造器。如果没有默认的构造器,那么 UObject 将不会编译。
2.构造器应该轻量化,仅用于设置默认的数值和子对象,构造时不应该调用其它功能和函数。对于 Actor和Actor组件,初始化功能应该输入 BeginPlay() 方法。
3.永远都不应使用 new 运算符。所有的 UObjects 都由虚幻引擎管理内存和垃圾回收。如果通过 new 或者 delete 手动管理内存,可能会导致内存出错
UObjects提供的功能
垃圾回收 引用更新 反射 序列化默认属性变化自动更新 自动属性初始化 自动编辑器整合 运行时类型信息可用 网络复制
头文件格式
UObject 在源(.cpp)文件中的实现与其他 C++ 类相似,其在头(.h)文件中的定义必须遵守特定的基础结构,以便在虚幻引擎 4 中正常使用。
使用编辑器的"New C++ Class"命令是设置格式正确头文件的最简单方法。
UObject 派生类的基础头文件可能看起来与此相似,假定 UObject 派生物被称为 UMyObject,其创建时所在的项目被称为 MyProject:
pragma once
include 'Object.h'
include 'MyObject.generated.h'
UCLASS() //使引擎能识别UMyObject
class MYPROJECT_API UMyObject : public UObject //如果UMyObject类公开到其他模块,则需指定MYPROJECT_API
{
GENERATED_BODY()
//此宏不获取参数,但会对类进行设置,以支持引擎要求的基础结构。所有UCLASS和USTRUCT都有此要求
}
Ticking 代表虚幻引擎中对象的更新方式。所有Actors均可在每帧被 tick,便于您执行必要的更新计算或操作。
Actor 和 Actor组件在注册时会自动调用它们的 Tick 函数,然而,UObjects 不具有嵌入的更新能力。在必须的时候,可以使用 inherits 类说明符从 FTickableGameObject 继承即可添加此能力。
这样即可实现 Tick() 函数,引擎每帧都将调用此函数。
销毁对象
对象不被引用后,垃圾回收系统将自动进行对象销毁。
这意味着没有任何 UPROPERTY 指针、引擎容器、TStrongObjectPtr 或类实例会拥有任何对它的强引用。
弱指针
不会组织对象的销毁 如果引用对象被销毁,则弱指针也将自动清空。弱指针的操作意图是保存一个到达目标对象的指针,但不会控制该对象的生命周期。
标签:UObject,对象,笔记,UMyObject,引擎,Actor,虚幻,UE5 From: https://www.cnblogs.com/MikuMono/p/18359028