跳转至

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,你可以在后续代码中使用这个变量来创建相应的实例。