UObject实例创建

在游戏进程代码中创建对象新实例的方法。

Windows
MacOS
Linux

NewObject

"NewObject()"是最简单的UObject工厂方法。它接受一个可选的外部对象和类,并用自动生成的名称创建一个新实例。

template< class T >
T* NewObject
(
    UObject* Outer=(UObject*)GetTransientPackage(),
    UClass* Class=T::StaticClass() 
)

参数

说明

"Outer"

可选。一个要设置为待创建对象的外部"UObject"。

"Class"

可选。一个用于指定待创建对象类的"UClass"。

Return Value

指向指定类的生成实例指针。

NewNamedObject

通过允许为新实例指定一个名称以及对象标记 和一个要指定为参数的模板对象,"NewNamedObject()"在"NewObject()"上展开。

template< class TClass >
TClass* NewNamedObject
(
    UObject* Outer, 
    FName Name, 
    EObjectFlags Flags = RF_NoFlags, 
    UObject const* Template=NULL
)

参数

说明

"Outer"

一个要设置为待创建对象的外部的"UObject"。

"Name"

一个要设置为新对象的"名称(Name)"的"FName"。

"Flags"

可选。描述新对象的"FObjectFlags"枚举值。

"Template"

可选。创建新对象时用作模板的"UObject"。

Return Value

指向指定类的生成实例指针。

ConstructObject

为了获得完全的灵活性,可以使用"ConstructObject()"函数创建"UObjects"的新实例。此函数调用"StaticConstructObject()",它分配对象,执行"ClassConstructor",并执行任何初始化,如加载配置属性,加载本地化属性和实例化组件。

template< class T >
T* ConstructObject
(
    UClass* Class, 
    UObject* Outer = (UObject*)GetTransientPackage(), 
    FName Name=NAME_None, 
    EObjectFlags SetFlags=RF_NoFlags, 
    UObject const* Template=NULL, 
    bool bCopyTransientsFromClassDefaults=false, 
    struct FObjectInstancingGraph* InstanceGraph=NULL 
)

参数

说明

"Class"

一个用于指定待创建对象的类的"UClass"。

"Outer"

可选。一个要设置为待创建对象的外部"UObject"。

"Name"

可选。一个要设置为新对象的"名称(Name)"的"FName"。

"SetFlags"

可选。描述新对象的"EObjectFlags"枚举值。

"Template"

可选。创建新对象时用作模板的"UObject"。

"bCopyTransientsFromClassDefaults"

可选。一个"布尔值",它决定是否从类默认对象(而不是传入的原型指针)复制瞬态属性。如果"true",使用类默认对象的瞬态。

"FObjectInstancingGraph"

可选。"FObjectInstancingGraph"结构体,包含实例化对象和组件到其模板的映射。用于实例化新对象所拥有的组件。

Return Value

指向指定类的生成实例指针。

对象标记

"EObjectFlags"枚举用于快速而简洁地描述对象。有各种各样的标志来描述对象的类型、垃圾收集如何处理它、对象在其生命周期中所处的阶段等等。还有特殊的全掩码或无掩码和预定义的标记组。

标记

说明

Object Type

RF_Public

0x00000001

对象在包含它的包外部是可见的。

RF_Standalone

0x00000002

即使没有被任何东西引用,对象也会被保留以供编辑。

RF_Native

0x00000004

对象是本地对象。这仅用于"UClass"对象。

RF_Transactional

0x00000008

对象是事务对象。

RF_ClassDefaultObject

0x00000010

对象是其类的默认对象,即该类的新实例在创建时使用的默认模板。

RF_ArchetypeObject

0x00000020

对象是另一个对象的模板。它被视为一个类默认对象。

RF_Transient

0x00000040

对象不保存到磁盘。

垃圾回收

RF_RootSet

0x00000080

即使对象没有被任何东西引用,它也不是被回收的垃圾。

RF_IsLazyReferenced

0x00000100

对象由一个延迟指针引用,删除时需要额外的清理。

RF_Unreachable

0x00000200

对象图表上不能访问该对象。

RF_TagGarbageTemp

0x00000400

对象被标记为供使用垃圾回收的各种实用程序所使用。此标记不由垃圾回收器本身解释。

对象生命周期

RF_NeedLoad

0x00000800

对象需要加载。

RF_AsyncLoading

0x00001000

对象是异步加载的。

RF_NeedPostLoad

0x00002000

对象需要后加载。

RF_NeedPostLoadSubobjects

0x00004000

对象仍然需要实例化子对象并修复序列化的组件引用

RF_PendingKill

0x00008000

对象正在等待销毁。基于游戏进程目的将对象标记为无效,但仍然是有效的对象。

RF_BeginDestroyed

0x00010000

对象已经调用了"BeginDestroy()"。

RF_FinishDestroyed

0x00020000

对象已经调用了"FinishDestroy()"。

特殊遮罩

RF_AllFlags

0x0003ffff

对象具有所有标记。主要用于错误检查。

RF_NoFlags

0x00000000

对象不具有标记。用于避免类型转换。

预定义的组

RF_Load

RF_Standalone

RF_Native

RF_Transactional

RF_ClassDefaultObject

从虚幻文件加载的标记。

RF_PropagateToSubobjects

RF_ArchetypeObject

子对象从其超对象继承的标记。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback