1 进阶¶
1 疑问¶
1.1 获取类实例时为什么要先调用 StaticClass 然后再调用 NewObject?¶
在使用 NewObject
函数创建 UObject
的派生类的实例时,需要先调用 StaticClass
函数获取类的类型信息。这是因为 NewObject
需要知道要创建的对象的类是什么,而 StaticClass
函数返回了表示类的类型信息的 UClass
对象。
简而言之,StaticClass
用于获取类的类型信息,而 NewObject
用于根据类型信息创建对象实例。这两者结合使用确保了对象的正确创建和初始化。以下是一个简单的例子:
// 获取类的类型信息
UClass* MyClassType = UMyClass::StaticClass();
// 根据类型信息创建对象实例
UMyClass* MyObject = NewObject<UMyClass>(Outer, MyClassType);
在这里,UMyClass
是一个继承自 UObject
的自定义类。StaticClass
函数返回了 UMyClass
的类型信息,然后 NewObject
函数使用这个类型信息创建了一个新的 UMyClass
对象实例。、
1.2 TSubclassOf 作用¶
TSubclassOf
是 Unreal Engine 中的一个模板类(template class),用于表示一个类的子类(subclass)。它主要用于蓝图类和 C++ 类之间的交互,允许你在不知道具体子类的情况下,传递一个类类型的引用或指针。
在 Unreal Engine 的代码中,TSubclassOf
主要用于处理类的引用,而不是类的实例。例如,在声明一个变量时,你可以使用 TSubclassOf
来指定这个变量应该是哪个类的子类。
以下是一个简单的示例,展示了 TSubclassOf
的用法:
// 声明一个 TSubclassOf 变量
TSubclassOf<AActor> MyActorSubclass;
// 设置 TSubclassOf 变量为特定的子类(例如 AMyCustomActor)
MyActorSubclass = AMyCustomActor::StaticClass();
// 使用 TSubclassOf 创建一个实例
AActor* NewActor = GetWorld()->SpawnActor<AActor>(MyActorSubclass, SpawnLocation, SpawnRotation);
在上述例子中,MyActorSubclass
是一个 TSubclassOf<AActor>
类型的变量,它可以用来表示 AActor
类的任何子类。通过将特定子类的类型信息(使用 StaticClass()
函数)分配给 MyActorSubclass
,你可以在后续代码中使用这个变量来创建相应的实例。