[UE] ActorIterator 사용해보기

네,가능합니다 ㅣ 2025. 5. 14. 12:20

태그가 "SpawnPoint"로 지정된 액터들을 월드에서 탐색한 후, 배열에 저장하는 로직을 구현함. 기존 배열은 `Empty()` 함수를 통해 초기화함.

1. 핵심 코드

SpawnPoint.Empty(4);
for (TActorIterator It(GetWorld()); It; ++It)
{
AActor* Actor = *It;
if (Actor->ActorHasTag(TEXT("SpawnPoint")))
{
SpawnPoint.Add(Actor);
}
}

2. 코드 설명

  • SpawnPoint.Empty(4); : 배열을 비우되, 이후에 추가될 액터 수를 예상하여 내부 메모리를 4칸 미리 할당함 (optional optimization).
  • TActorIterator<AActor> : 현재 월드에 존재하는 모든 액터를 순회함.
  • ActorHasTag(TEXT("SpawnPoint")) : 액터에 지정된 태그 중 "SpawnPoint"가 있는 경우만 필터링함.
  • SpawnPoint.Add(Actor); : 조건에 부합하는 액터를 배열에 추가함.

3. 배운 점

  • Empty() 함수에 예상 용량을 전달하면 메모리 재할당을 줄일 수 있음.
  • ActorHasTag는 태그 기반 필터링을 간단하게 구현할 수 있어 레벨 구성 시 유용함.
  • 모든 액터에 접근할 수 있는 TActorIterator는 범용적으로 활용 가능하지만, 비용이 크므로 필요할 때만 사용해야 함.

4. 요약

태그 기반으로 특정 액터들을 찾아 배열에 저장하는 방법을 익힘. 배열 초기화 시 예상 크기를 전달하여 최적화를 유도할 수 있다는 점도 확인함.