이름으로 구별하는 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());
}
}
}
'Unreal Engine' 카테고리의 다른 글
| UE5) TimerDelegate, BindLambda (0) | 2025.05.18 |
|---|---|
| UE5) Actor의 Mesh, Collision, Material 설정하기 (0) | 2025.04.26 |
| UE5) Lighting 조정 (Allow Static Lighting) (0) | 2025.03.16 |