언리얼 엔진에서 사용하는 문자열의 종류를 알아보고 

각각 어떤 차이점이 있는지 언제 사용되는지 또 주의할 점이 뭐가 있는지 알아보자! 

 

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으로 변환 해야함

 

 


정리

 

 

 

참고 링크: 

String Handling 

FName

FString

FText

 

Rudolufoo