언리얼 엔진에서 사용하는 문자열의 종류를 알아보고
각각 어떤 차이점이 있는지 언제 사용되는지 또 주의할 점이 뭐가 있는지 알아보자!
FName
- 고정된 문자열을 표현
- 초경량 시스템을 제공하여 매우 빠른 비교와 검색이 가능
- 대소문자를 구분하지 않으며, 소유 스트링 테이블에 대한 인덱스와 인스턴스 번호의 조합으로 저장
- 변경 불가능(Immutable)한 특징을 가지고 있음
FName TestHUDName = FName(TEXT("ThisIsMyTestFName"));
언제 사용할까?
- 주로 액터의 이름, 태그, 엔진 내부에서의 식별자 등으로 사용됨
- 비교나 검색이 자주 발생하는 문자열에 적합
주의 사항
- FName은 메모리와 성능 측면에서 매우 효율적이지만,
변경이 불가능하기에 가변적인 문자열을 처리할 수 없음 - FName -> FText으로 변환 시 FText의 자동 현지화가 적용되지 않음
FString
- 가변적인 문자열을 표현
- FName이나 FText와 달리 조작이 가능한 유일한 문자열 클래스
- 대소문자 변환, 부분 문자열 발췌, 역순 등 다양한 문자열 연산을 지원
- C++의 std::string 과 유사
- FString::Printf로 조립하여 UE_LOG 디버그 메시징으로 출력 가능
FString TestHUDString = FString(TEXT("This is my test FString."));
언제 사용할까?
- 문자열을 읽고 쓰고 변경할 때 사용
- 파일 입출력, 문자열 조작 등이 필요한 경우에 적합
주의 사항
- FString은 비교적 더 많은 메모리를 사용하고 FName보다 성능이 낮음
- FString -> FName으로 변환 시 대소문자를 구분하지 않아서 손실이 발생
- FString -> FText으로 변환 시 FText의 자동 현지화가 적용되지 않음
FText
- 다국어 지원(Localization)을 위해 설계된 문자열 타입
- 사용자에게 표시되는 텍스트에 사용됨
- 로컬라이제이션 시스템과 통합되어 여러 언어로 번역이 가능
- FText는 ITextData로의 TSharedRef로 구현됨
- FText 인스턴스 안에 저장된 데이터는 FText 생성 방식에 따라 다양하며
이는 텍스트 히스토리(FTextHistory)로 처리함
텍스트 히스토리는 컬처에 맞는 텍스트 리빌드를 지원
// 텍스트를 포함할 새 FCanvasTextItem 인스턴스를 만듭니다.
FCanvasTextItem TextItem(FVector2D::ZeroVector, TestHUDText, BigFont, FLinearColor::Black);
// FCanvasTextItem에 텍스트를 추가합니다.
TextItem.Text = FText::Format(LOCTEXT("ExampleFText", "You currently have {0} health left."), CurrentHealth);
// FCanvas::DrawItem을 사용하여 화면에 텍스트를 그립니다.
Canvas->DrawItem(TextItem, 10.0f, 10.0f);
언제 사용?
- UI 텍스트, 메시지, 다국어 지원이 필요한 텍스트에 사용
- 게임 내 텍스트를 다른 언어로 쉽게 번역
주의 사항
- FText는 다른 문자열 타입보다 무겁고 성능이 떨어질 수 있음
- 단순한 문자열 조작에는 적합하지 않음
- FText -> FString으로 변환 시 일부 언어에 손실이 올 수 있음
- FText -> FName으로 직접적인 변환 불가능
변환 (Conversion)
From | To | Example |
FName | FString | MyFString = MyFName.ToString(); |
FName | FText | MyFText = FText::FromName(MyFName); |
FString | FName | MyFName = FName(*MyFString); |
FString | FText | MyFText = FText::FromString(MyFString); |
FText | FString | MyFString = MyFText.ToString(); |
FText | FName | FText에서 FName으로 직접적인 변환은 없음 FText -> FString -> FName으로 변환 해야함 |
정리
참고 링크:
'Unreal Engine > UE5' 카테고리의 다른 글
UE5 - 반사 시스템 (Reflection System) :: 리플렉션 시스템 ? 🌈 (0) | 2024.07.26 |
---|---|
UE5 - 총명한 가리키개 (Smart Pointer) (0) | 2024.07.11 |
UE5 - What is Outer, Onwer ? GetOuter() & GetOwner() (2) | 2024.04.20 |