我发现了四种不同的实例化对象的方法,但是不确定我的理解是否清楚。
NewObject<T>()
函数,当我们想在UObject的实例上使用时。例如,它可以是任何ActorComponents。
USomeComponent sc = NewObject<USomeComponent> (class);
[ConstructObject<T>()
另外一种初始化UObject的方法...
CreateDefaultSubobject<T>()
,但是使用此功能,我们还可以创建从UObject
继承的任何类的实例。
[SpawnActor<T>()
用于实例化AActor
类的对象。
CreateDefaultSubobject<T>()
,但是使用此功能,我们还可以创建从UObject
继承的任何类的实例。所以第一个问题:如果我们可以将这些功能用于一个目的,有什么区别?我们如何以及何时以及为何需要使用它们中的任何一个?
要了解这些功能之间的区别,您需要记住对象模型在虚幻引擎中,它基于对象原型,非常类似于JavaScript。每个UClass相关联到关联的UObject类的默认实例,称为类默认对象(CDO),该默认实例是在初始化引擎时,首先通过类构造函数进行分配,然后仅通过
因此,必须使用多种创建对象的方法来处理所有不同的可能创建对象的方案。
UObject::CreateDefaultSubobject
仅可在类构造函数中调用,并负责创建CDO实例子对象的类,将其外部类设置为调用者对象,并自动注册组件,除其他事项外。实例化其对象类后,创建的对象将成为该属性的默认对象。NewObject<T>
是通常在正常游戏过程中在引擎初始化后实例化对象的功能。它提供了一些方便的重载来处理大多数情况。UWorld::SpawnActor<T>
是一种方便的方法,可以在具有指定位置和旋转的级别中生成actor,生成碰撞设置,并检查以确保它是可生成的actor类,并且仅是的包装器NewObject<AActor>
。[ConstructObject
已被删除,以NewObject
开头。
StaticConstructObject_Internal
,用于处理实际的对象创建。