Unreal Engine

UE5) DisplayName, Tag

나무늘보섬 2025. 5. 18. 22:11

이름으로 구별하는 DisplayName은 VR 프로그램에서 빌드나 실행 과정에서 오류를 발생할 수 있다고 함,

-> 따라서 Tag로 구분하는 게 더 확실함. 

 

DisplayName

- DisplayName의 경우, actor의 이름이 아니라 아웃라이너에 있는 Actor의 이름.

- Actor->GetName()의 경우, Class의 이름이 나옴. (인스턴스나 아웃라이너에 있는 Actor의 이름이 아님)

- Actor->GetName()을 통해 바로 사용 가능하지만, DisplayName은 가져오려면 다른 함수와 헤더파일이 필요함.

더보기

// #include "Kismet/KismetSystemLibrary.h"

FString DisplayName = UKismetSystemLibrary::GetDisplayName(Actor);
if(DisplayName.Contains("설정해준 이름이나 class와 비슷한 이름"))
{
 // 함수 과정
}
 

Tag

- Actor와 Components 2개로 나뉨

- Actor tag의 경우, Actor 그 자체에 tag가 부여됨.

- Component tag의 경우, 컴포넌트에 tag가 부여되서 Actor->ActorHasTag()와 같이 사용할 경우 검색이 안됨.

 

더보기
void ALabUIEvent::SetLabUIs()
{
    UGameplayStatics::GetAllActorsOfClass(GetWorld(), ASubtitle::StaticClass(), SubTitleActors);
    for (AActor* Actor : SubTitleActors)
    {
        ASubtitle* SubtitleActor = Cast<ASubtitle>(Actor);
        // Caution: 'DisplayName' could not work on VR
        // Just for back-up
        // FString DisplayName = UKismetSystemLibrary::GetDisplayName(Actor);
        if (/*DisplayName.Contains("Restasurant") or*/ Actor->ActorHasTag("Restaurant"))
        {
            RestaurantSubtitle = SubtitleActor;
            // UE_LOG(LogTemp, Warning, TEXT("RestaurantSubTitle Name: %s"), *SubtitleActor->GetName());
        }
        else if (/*DisplayName.Contains("Hotel") or*/ Actor->ActorHasTag("Hotel"))
        {
            HotelSubtitle = SubtitleActor;
            // UE_LOG(LogTemp, Warning, TEXT("HotelSubTitle Name: %s"), *SubtitleActor->GetName());
        }
        else if (/*DisplayName.Contains("Street") or */Actor->ActorHasTag("Street"))
        {
            StreetSubtitle = SubtitleActor;
            // UE_LOG(LogTemp, Warning, TEXT("StreetSubTitle Name: %s"), *SubtitleActor->GetName());
        }
    }
}