언어:
페이지 정보
엔진 버전:
언리얼 엔진
이 문서가 번역된 이후 업데이트된 내용이 있을 수 있습니다. 자세한 내용은 영문 페이지를 참고하세요.

FText

언리얼 엔진

FText 는 "표시되는 문자열"을 나타냅니다. 사용자에게 표시하고자 하는 텍스트는 FText 로 처리해야 합니다. FText 클래스에는 현지화 기능이 내장되어 있어, 현지화되어 룩업 테이블에 저장된 텍스트 콘텐츠 뿐만 아니라, 숫자, 날짜, 시간, 포맷 텍스트처럼 실시간 현지화되는 텍스트도 처리할 수 있습니다. 현지화할 필요가 없는 텍스트조차도 FText 로 처리 가능합니다. 여기에는 플레이어 이름처럼 사용자가 입력한 콘텐츠나, 슬레이트로 표시되는 텍스트도 포함됩니다. FText 에는 어떠한 변환 함수도 제공되지 않는데, 표시되는 문자열에 변경을 가하는 것은 매우 불안전한 작업이기 때문입니다.

슬레이트와 FText

전체적으로 Slate (슬레이트)는 FString 에 후크 노출시키던 것에서 FText 쪽으로 옮기는 추세입니다. 현지화 관련된 것들은 FText 가 인터페이스 뒤에서 모두 처리해 주므로, 앞으로 슬레이트는 실시간 언어 변환같은 기능도 지원하게 될 것입니다. FString 으로는 불가능한 작업이지요. FText 를 사용하면 텍스트 렌더링 퍼포먼스가 향상되기도 합니다. FText 를 사용할 때는 문자열이 변경 불가능한 것으로 간주되기에, 문자열의 메모리 주소를 빠른 캐시 룩업용 키로 사용할 수 있습니다. 이는 문자열에 변화가 있나 검사해서 표시용으로 재측정하는 데 비해서 비용이 훨씬 저렴합니다. 마지막으로 슬레이트에서 FText 를 사용한다는 것은, 현지화 지원 기능이 UI 시스템에 자연스럽게 통합된다는 뜻으로, 현지화 모범 사례용 강력한 프레임워크가 존재할 것입니다.

FText 생성하기

FText 의 현지화 기능 때문에, 각 FText 는 텍스트와 함께 키도 셋업해 줘야 합니다. LOCTEXTNSLOCTEXT 매크로를 사용하면 FText 를 올바르게 셋업해 줍니다. LOCTEXT 는 키와 텍스트를 파라미터로 받습니다. 모든 파라미터는 스트링 리터럴이어야 합니다. 모든 리터럴은 현지화 시스템을 거치게 됩니다.

이 현지화 키의 네임스페이스를 지정하기 위해서는 먼저 글로벌 LOCTEXT_NAMESPACE 매크로를 스트링 리터럴로 설정해 줘야 합니다.

LOCTEXT 매크로를 사용하여 스트링에서 FText 를 생성하려면:

/* 파일 시작 */ 
#define LOCTEXT_NAMESPACE "Your Namespace" 
... 
FText TestHUDText = LOCTEXT( "Your Key", "Your Text" ) 
... 
#undef LOCTEXT_NAMESPACE 
/* 파일 끝 */ 

NSLOCTEXT 은 키와 텍스트에 추가로 네임스페이스를 파라미터로 받습니다. 모든 파라미터는 스트링 리터럴이어야 합니다. 모든 리터럴은 현지화 시스템을 거치게 됩니다.

FText TestHUDText = NSLOCTEXT( "Your Namespace", "Your Key", "Your Text" ) 

빈 FText 를 만들 수도 있는데, 문법은 다음과 같습니다:

  • FText TestHUDText = FText::GetEmpty();

  • FText TestHUDText = FText();

변환

스트링 변수

FText 에서

에서

예제

FText

FString

TestHUDString = TestHUDText.ToString();

FText -> FString 은 안전하지 않습니다. 일부 언어에서는 변환시 손실될 위험이 있습니다.

FText

FName

FText 에서 FName 으로의 직접 변환은 없습니다. 대신, FString 을 거친 다음 FName 으로 변환하는 방법이 있습니다.

FText -> FString -> FName 은 손실성 변환이라 위험합니다. FName 은 대소문자를 구분하지 않기 때문입니다.

FText 스트링은 불변이므로 반환되는 스트링을 복제하지 않고는 변경을 가할 수 없을 것입니다.

FText 로

에서

예제

FName

FText

TestHUDText = FText::FromName(TestHUDName);

FName -> FText 는 가능한 경우도 있지만, FName 의 내용이 FText 의 "자동 현지화" 혜택을 받지 못할 수 있음에 유념해 주시기 바랍니다.

FString

FText

TestHUDText = FText::FromString(TestHUDString);

FString -> FText 은 가능한 경우도 있지만, FString 의 내용이 FText 의 "자동 현지화" 혜택을 받지 못할 수 있음에 유념해 주시기 바랍니다.

숫자 변수

FName 스트링에서 숫자 변수로의 변환은 존재하지 않습니다.

FText 로

floatint 변수는 FText::AsNumber() 를 사용해서 FText 로 변환 가능합니다. 이 함수는 전달된 수치가 현재 문화권에서 어떻게 표시되는지를 나타내는 FText 를 생성합니다.

예제:

FText::AsNumber( CurrentHealth )

그 외의 숫자 변환은 다음과 같습니다:

  • FText::AsPercent()

  • FText::AsCurrency()

  • FText::AsDate()

  • FText::AsTime()

비교

두 FText 스트링 간의 비교는 FText::EqualTo() 또는 FText::EqualToCaseIgnored() 로 하며, 그 결과는 true 또는 false 입니다. FText::CompareTo() 또는 FText::CompareToCaseIgnored() 를 사용해서 문자열을 비교하면 정수 값이 반환됩니다.

FText 는 현재 그 비교 연산에 연산자를 노출시키지 않는데, 그 연산이 FString 같은 단순 서수 비교가 아니기 때문입니다. 연산 비용을 염두에 두고, 일반 연산자는 사용하지 않기로 했습니다.

HUD 의 FText

캔버스

Canvas 를 사용해서 HUD 에 FText 를 표시하려면, FCanvasTextItem 을 새로 만들어야 합니다.

FCanvasTextItem TextItem( FVector2D::ZeroVector, TestHUDText, BigFont, FLinearColor::Black);

Text 변수를 설정하는 것으로 FCanvasTextItem 의 텍스트를 변경할 수 있습니다:

FFormatNamedArguments Arguments;
Arguments.Add(TEXT("CurrentHealth"), FText::AsNumber( CurrentHealth ));
TextItem.Text = FText::Format(LOCTEXT("ExampleFText", "You currently have {CurrentHealth} health left."), Arguments ) ;

FText 를 화면에 실제로 표시하려면, FCanvas::DrawItem() 함수를 호출합니다:

Canvas->DrawItem(TextItem,10.0f,10.0f);

HUD 클래스의 DrawHUD() 함수 안에서 DrawItem() 함수를 호출해야 하며, 아니면 DrawHUD() 로 시작하는 함수 체인에서 호출해야 합니다.

블루프린트의 FText

블루프린트는 Text 리터럴을 지원합니다. Text 값에 대한 입력 핀은 노드의 값에 할당되는 것을 지원하며, 이러한 스트링이 현지화용으로 수집됩니다.