成都企业网站网络营销,外发加工网官网,东莞网页开发,中国装修建材网一. Uboject的官方文档的个人理解
Objects in Unreal Engine | 虚幻引擎 5.5 文档 | Epic Developer Community
目录在此 1.垃圾回收:上篇文章简单介绍过#xff0c;UObject的创建和回收。本身是很复杂的功能#xff0c;后续会接着单项深入分析。
2.引用更新
1. 反射:之前…一. Uboject的官方文档的个人理解
Objects in Unreal Engine | 虚幻引擎 5.5 文档 | Epic Developer Community
目录在此 1.垃圾回收:上篇文章简单介绍过UObject的创建和回收。本身是很复杂的功能后续会接着单项深入分析。
2.引用更新
1. 反射:之前的文章描述过的CDO还有就是C与蓝图相互调用UFUCTION,UPROPERTY。
2.序列化编辑器的资产序列化到磁盘上变为.uasset等格式的资产文件。所有的东西存在编辑器里都是UObject它们通过Serialize()进行里的序列化操作。
3.默认属性值自动更新属性值你改过就以你改过为准。你没改过它就是默认属性值。你在代码里改过默认属性值则所有没改过的属性值都会跟着改。
4.自动属性初始化所有UPROPERTY下的属性值如果自己不初始化则会自动初始化就是int ,float 会初始化0字符串会初始化为空串。
5.运行时类型信息可用做类型转换的判定is,as的关系
6.网络复制有些属性要从服务器同步过来就需要UPREPERTY里的元数据replitic。 USTRUCT 大部分都有它有着和UObject一样的反射和序列化能力。USTRUCT会被当做数值类型处理而且而且不会被GC掉。
UObject不具备每帧更新的能力在必要时可以使用inherites类说明符从 FTickableGameObject继承即可添加此能力拥有Tick()。
二. 头文件
一般都会包含那几个头文件和宏。用多了自然就记住了
#pragma once#include Object.h#include MyObject.generated.hUCLASS()class MYPROJECT_API UMyObject : public UObject{GENERATED_BODY()};
官方文档很详细。就不多说了。 三.UObject的销毁
我一般都是Destroy销毁和 IsValid()判断是否有效不为空没被回收。由于对智能指针运用不纯熟再不写后续有更深入的理解。会再补上。大家自行看文档。 四.NewObject
是最简单的UObject工厂方法。它接受一个可选的外部对象和类并用自动生成的名称创建一个新实例这里直接看引擎源码
#if DO_CHECK
/** Called by NewObject to make sure Child is actually a child of Parent */
COREUOBJECT_API void CheckIsClassChildOf_Internal(const UClass* Parent, const UClass* Child);
#endif/*** Convenience template for constructing a gameplay object** param Outer the outer for the new object. If not specified, object will be created in the transient package.* param Class the class of object to construct* param Name the name for the new object. If not specified, the object will be given a transient name via MakeUniqueObjectName* param Flags the object flags to apply to the new object* param Template the object to use for initializing the new object. If not specified, the classs default object will be used* param bCopyTransientsFromClassDefaults if true, copy transient from the class defaults instead of the pass in archetype ptr (often these are the same)* param InInstanceGraph contains the mappings of instanced objects and components to their templates* param ExternalPackage Assign an external Package to the created object if non-null** return a pointer of type T to a new object of the specified class*/
template class T
FUNCTION_NON_NULL_RETURN_STARTT* NewObject(UObject* Outer, const UClass* Class, FName Name NAME_None, EObjectFlags Flags RF_NoFlags, UObject* Template nullptr, bool bCopyTransientsFromClassDefaults false, FObjectInstancingGraph* InInstanceGraph nullptr, UPackage* ExternalPackage nullptr)
UObject* Outer, const UClass* Class, FName Name NAME_None, EObjectFlags Flags RF_NoFlags, UObject* Template nullptr, bool bCopyTransientsFromClassDefaults false, FObjectInstancingGraph* InInstanceGraph nullptr, UPackage* ExternalPackage nullptr
Outer是对象。新的外部对象。如果未指定对象将在临时包中创建Class。有没有外部的内存接住没有就临时内存。
Class是指要构造的对象。
Flags 应用于新对象的对象标志。就是说Object有哪些特性。
Template 初始化新特性没有的话就用CDO初始化
UCameraComponent* tmpComp NewObjectUCameraComponent(CastUObject(this), baseClass, *it.CameraName);
比SpawnActor简单不少。
五.对象标记
对象标记
EObjectFlags 枚举用于快速而简洁地描述对象。有各种各样的标志来描述对象的类型、垃圾收集如何处理它、对象在其生命周期中所处的阶段等等。还有特殊的全掩码或无掩码和预定义的标记组。
理解通过位运算来确认有哪些特性。一个位都包含多个特性就像在游戏里也经常来位。进行状态判断。 六.虚幻Object处理
说一些我觉得有意思的。
请注意这不意味着所有UObject*变量都必须是UProperties。如果你需要的Object指针不是UProperty请考虑使用TWeakObjectPtr。这是弱指针意味着不会妨碍垃圾回收但可以查询有效性然后再接受访问并且它所指向的Object要被销毁时它将被设置为空。
更可靠但不用UPropertiesTWeakObjectPtr也可以可靠稳定内存不会有问题。
序列化
当UObject被序列化时所有UProperty值都将被自动写入或读取除非显式标记为瞬时或无法从后构造函数默认值进行更改。例如你可以在关卡中放入AEnemy实例将其体力Health设置为500保存并成功地重新加载而不必在UClass定义之外编写一行代码。
当添加或删除UProperties时系统会无缝处理加载预先存在的内容。新属性从新的CDO复制默认值。删除的属性将会被静默忽略。
如果需要自定义行为则可以覆盖UObject::Serialize函数。这对于检测数据错误检查版本号或执行自动转换或更新如果数据格式有所更改十分有用。
UObject直接通过uasset读取信息不需要读表之类的操作。
网络复制一般有两种同步一种是从服务器同步到客户端。另一种RTC,客户端呼叫服务器执行服务器呼叫客户端执行用到了UPROPERTYUFUNCTION 同步UObject。
RPC本质上是一次简单的请求即一次性的数据传输。RPC具有主动性可以在客户端和服务器之间发起主动通信。
七.TSubClassOf
可以简单理解为蓝图C中关于UClass类的通信方式,还强制了派生类的限定。当然UClass最底层还是继承UObject
TSubclassOf 是提供 UClass 类型安全性的模板类。例如您在创建一个投射物类允许设计者指定伤害类型。您可只创建一个 UClass 类型的 UPROPERTY让设计者指定派生自 UDamageType 的类或者您可使用 TSubclassOf 模板强制要求此选择.
八.类说明符
类说明符 | 虚幻引擎 5.5 文档 | Epic Developer Community
小心MiniAPI无法被调用。