관리 메뉴

기억을 위한 기록들

[UE] 월드 내 액터 탐색 할 때에는 TActorIterator 라는 클래스 템플릿이 있다. 본문

UnrealEngine

[UE] 월드 내 액터 탐색 할 때에는 TActorIterator 라는 클래스 템플릿이 있다.

에드윈H 2025. 7. 1. 08:47

 

언리얼엔진에서 월드 내의 특정 액터들을 효율적으로 찾고 순회하는 방법으로 TActorIterator 라는 템플릿 클래스가 있다.

 

 

UWorld안에 존재하는 액터들을 타입 기반으로 자동 필터링하며 순회하는 템플릿 반복자로써,  액터들을 찾기 위한 함수 중에 하나로 GetAllActosOfClss() 라는 함수를 예전에 사용 했었지만, 결국 이 함수도 내부적으로 TActorIterator를 기반으로 TArray를 할당하고 복사를 발생시켜 비용이 크다.

GetAllActosOfClss 함수 내부

 

 

 

예시) 월드안에 있는 AMyEnemy 기반 혹은 자식 클래스 액터 탐색하기

for (TActorIterator<AMyEnemy> It(GetWorld()); It; ++It)
{
    AMyEnemy* Enemy = *It;
    
    if (Enemy->IsAlive())
    {
        Enemy->Highlight();
    }
}

 

 

예시2) 특정 클래스로 필터링한다면

 

UClass* ReceiverClass = AMySpecialEnemy::StaticClass();
//혹은 TSubclassOf 파라미터로 전달받은 경우도 가능
// TSubclassOf<AMySpecialEnemy> TargetClass = 어디선가 전달받고..
// UClass* ReceiverClass = TargetClass.Get()
for (TActorIterator<AActor> It(GetWorld(), ReceiverClass); It; ++It)
{
    AActor* Actor = *It;
    // ReceiverClass 또는 그 자식 타입만 필터링됨
}

 

 

 

복잡한 액터 필터링 로직이나 비용이 큰 함수대신, 상황에 따라 TActorIterator는 좋은 선택이 될 수 있다.