网站建设合同 技术合同范本,网站速度打开慢的原因,贵阳网站设计详细解读,网站上的图用美图秀秀做可以吗一.UObject
UObject是所有对象的基类#xff0c;往上还有UObjectBaseUtility。
注释#xff1a;所有虚幻引擎对象的基类。对象的类型由基于 UClass 类来定义。 这为创建和使用UObject的对象提供了 函数#xff0c;并且提供了应在子类中重写的虚函数。
/** * The base cla…一.UObject
UObject是所有对象的基类往上还有UObjectBaseUtility。
注释所有虚幻引擎对象的基类。对象的类型由基于 UClass 类来定义。 这为创建和使用UObject的对象提供了 函数并且提供了应在子类中重写的虚函数。
/** * The base class of all UE objects. The type of an object is defined by its UClass.* This provides support functions for creating and using objects, and virtual functions that should be overridden in child classes.* * see https://docs.unrealengine.com/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Objects*/
class UObject : public UObjectBaseUtility
为 UObject 提供工具类的函数不应直接使用此类。
/*** Provides utility functions for UObject, this class should not be used directly*/
class UObjectBaseUtility : public UObjectBase
{
为更底层接口提供给UObject也不能直接使用
/** * Low level implementation of UObject, should not be used directly in game code */
class UObjectBase
{
反射系统直接一般是收集UObject的信息。是在运行的时候拿到运行的对象注册的信息。将这个信息写入对象的表随时可以取到访问。
二.UCLASS 宏的理解
The UCLASS Macro
The UCLASS macro gives the UObject a reference to a UCLASS that describes its Unreal-based type. Each UCLASS maintains one Object called the Class Default Object(CDO). The CDO is essentially a default template Object, generated by the class constructor and unmodified thereafter. Both the UCLASS and the CDO can be retrieved for a given Object instance, although they should generally be considered read-only. The UCLASS for an Object instance can be accessed at any time using the GetClass() function.
A UCLASS contains a set of properties and functions that define the class. These are normal C functions and variables available to standard C code, but tagged with Unreal Engine-specific metadata that controls how they behave within the Object system. For more details about the tagging syntax, refer to the Programming
UCLASS宏为 UObject 提供一个对 UCLASS 的引用而UCLASS描述了一个基于虚幻引擎的类型。 每个 UCLASS 都持有一个 类默认对象(Class Default Object) 简称CDO。CDO 本质上是一个默认的 “模板” 对象由类的构造函数生成随后保持不变。尽管UCLASS和CDO通常都会被看做是“只读”的但是每个Object实例都可以取得他们的UCLASS和CDO。你随时都可以使用 GetClass() 函数来访问Object实例的UCLASS。
UCLASS 包含了一套用于定义这个类的属性和函数——他们就是原生的C函数与变量但被虚幻引擎特有的元数据所标记它们在UObject系统中的行为也因此受到控制。如需了解标记语法的更多细节请查阅 Programming Reference。
需要注意 UObject 类也可以包含 native-only译注应该是指C原生的未被标记的属性或函数这些属性不存在于相应的 UCLASS 中。
三.个人验证解读
重点是 类的构造函数生成随后保持不变。每个Object实例都可以取得他们的UCLASS和CDO。 原生的C函数与变量但被虚幻引擎特有的元数据所标记它们在UObject系统中的行为也因此受到控制。
上测试代码
// Sets default values
AMyActor::AMyActor():money(200)
{// Set this actor to call Tick() every frame. You can turn this off to improve performance if you dont need it.PrimaryActorTick.bCanEverTick true;RootComponent CreateDefaultSubobjectUSceneComponent(Root);money 300;
}int32 AMyActor::GetCurrentMoney()
{return money;
}int32 AMyActor::GetMyCDOMoney()
{UClass* GWXClass AMyActor::StaticClass();UObject* MyObject GWXClass-GetDefaultObject();AMyActor* MyCDO CastAMyActor(MyObject); if (MyCDO){return MyCDO-money;}return -1;
}// Called when
GetCurrentMoney(),在编辑器上使用会修改它的不同实例返回值。但使用GetMyCDOMoney()通过CDO创建时都是构造函数中的300。
因为蓝图的操作反射等。都是通过构造函数后重写编译写在MyActor.gen.cpp文件中CDO是默认的实例对象不会改变。我们在编辑其中修改。再在关卡蓝图里测试都是通过了这个文件拿到后续再处理。甚至蓝图运行时断点都能打到这个文件上。说明蓝图其实就是从这里来的。由此我们可以初见反射系统的神奇与巧妙。