F11.GetActorOfClass
大约 3 分钟
GetActorOfClass
节点介绍

节点案例
c++剖析
GameplayStatics.h
/**
* 在世界中查找指定类的第一个Actor。
* 这是一项耗时的操作,谨慎使用,例如不要在每一帧都使用。
* @param ActorClass 要查找的Actor的类。必须指定,否则结果将为空。
* @return 指定类的Actor。
*/
UFUNCTION(BlueprintCallable, Category="Actor", meta=(WorldContext="WorldContextObject", DeterminesOutputType="ActorClass"))
static class AActor* GetActorOfClass(const UObject* WorldContextObject, TSubclassOf<AActor> ActorClass);
class MyClass {
public:
int myVariable;
void MyFunction() {
// 函数实现
}
};
// 创建一个MyClass类的实例
MyClass myObject;
//如果函数是static实现,则不需要创建实例就可以直接调用
class MyClass {
public:
int myVariable;
static void MyFunction() {
// 静态函数实现
}
};
// 直接调用静态函数
MyClass::MyFunction();
GameplayStatics.cpp
AActor* UGameplayStatics::GetActorOfClass(const UObject* WorldContextObject, TSubclassOf<AActor> ActorClass)
{
// 使用QUICK_SCOPE_CYCLE_COUNTER进行性能分析,标记函数调用的性能
QUICK_SCOPE_CYCLE_COUNTER(UGameplayStatics_GetActorOfClass);
// 如果未提供ActorClass,则不执行任何操作,直接返回nullptr
if (ActorClass)
{
// 通过WorldContextObject获取当前世界的指针,如果失败则记录错误并返回nullptr
if (UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull))
{
// 使用TActorIterator迭代World中的所有指定类型的Actor
for (TActorIterator<AActor> It(World, ActorClass); It; ++It)
{
// 获取当前迭代到的Actor指针
AActor* Actor = *It;
// 返回找到的第一个符合条件的Actor
return Actor;
}
}
}
// 如果未找到符合条件的Actor,返回nullptr
return nullptr;
}
GetAllActorOfClass

节点介绍
GameplayStatics.h
/**
* 在世界中查找指定类的所有角色。
* 这是一个较慢的操作,请谨慎使用,例如不要在每一帧都使用。
* @param ActorClass 要查找的Actor类。必须指定,否则结果数组将为空。
* @param OutActors 输出包含指定类的Actor数组。
*/
UFUNCTION(BlueprintCallable, Category="Actor", meta=(WorldContext="WorldContextObject", DeterminesOutputType="ActorClass", DynamicOutputParam="OutActors"))
static void GetAllActorsOfClass(const UObject* WorldContextObject, TSubclassOf<AActor> ActorClass, TArray<AActor*>& OutActors);
GameplayStatics.cpp
void UGameplayStatics::GetAllActorsOfClass(const UObject* WorldContextObject, TSubclassOf<AActor> ActorClass, TArray<AActor*>& OutActors)
{
// 使用QUICK_SCOPE_CYCLE_COUNTER进行性能分析,标记函数调用的性能
QUICK_SCOPE_CYCLE_COUNTER(UGameplayStatics_GetAllActorsOfClass);
// 清空输出数组
OutActors.Reset();
// 如果未提供类,则不执行任何操作,而是返回空数组
if (ActorClass)
{
// 从上下文对象获取世界,如果失败则记录错误并返回空
if (UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull))
{
// 遍历世界中指定类的所有Actor
for (TActorIterator<AActor> It(World, ActorClass); It; ++It)
{
AActor* Actor = *It;
OutActors.Add(Actor);
}
}
}
}
问题
其他问题
getactorofclass
vsCast

参考链接
https://forums.unrealengine.com/t/get-actor-of-class-vs-cast-to-class/597433