Language:
Page Info
Engine Version:
The translation of this page is out of date. Please see the English version for the latest version of the page.

FText

FText とは、「表示文字列」のことです。ユーザーに表示するテキストは、すべて FText で処理されます。FText クラスは、ローカリゼーション用にビルトインされたサポートです。 参照テーブルに格納されたローカライズ済みのテキスト コンテンツの処理に加えて、数、日付、時間、フォーマット済みテキストなどのランタイム時にローカライズされるテキストの処理も行います。ローカライズが必要ないテキストでさえも、 FText で処理が可能です。プレイヤー名などのユーザーが入力するコンテンツやスレートで表示されるテキストなどが含まれます。文字列を表示するために変更するというのは非常に危険な操作なので、Ftext には変更関数はありません。

スレートと FText

全体的に、スレートは FString 用のフックのエクスポーズをやめて、FText よりになっています。FText はインターフェース背後にあるローカリゼーション関連事項をすべて処理するため、 スレートは Live Language の切り替え機能などを今後サポートできるようになります。FString でこの操作が可能になります。FText を使うと、テキストのレンダリング パフォーマンスもあがります。FText を使う場合、文字列は不変であることが前提なので、 文字列のメモリ アドレスをファスト キャッシュ参照のキーとして使うことができます。変更するために文字列をチェックしたり、表示するために再度測定するより、 負荷は遥かに小さくなります。最後に、スレートで FText を使うということは、ローカリゼーションのサポートが UI システムに当然統合されていることを意味するので、 ローカリゼーションのベスト プラクティスに対し、しっかりしたフレームワークが存在します。

FText の作成

FText のローカリゼーション アプリケーションのために、 FText はキーとしてのみならずテキストとしても設定しておかなければなりません。マクロの LOCTEXT と NSLOCTEXT を使うと FText を正しく設定することができます。 LOCTEXT はキーとテキストをパラメータとして受け取ります。パラメータは全て文字列リテラルです。リテラルはすべてローカリゼーション システム経由でパスされます。

このローカリゼーション キーの名前空間を指定するために、グローバルな LOCTEXT_NAMESPACE マクロをまず文字列リテラルに設定する必要があります。

LOCTEXT マクロでストリングから FText を作成する方法です。

/* Top of File */ 
#define LOCTEXT_NAMESPACE "Your Namespace" 
... 
FText TestHUDText = LOCTEXT( "Your Key", "Your Text" ) 
... 
#undef LOCTEXT_NAMESPACE 
/* Bottom of File */ 

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 が有効な場合はありますが、FNames のコンテンツは FText の「自動ローカライゼーション」 の効果がないことに注意してください。

FString

FText

TestHUDText = FText::FromString(TestHUDString);

FString -> FText が有効な場合はありますが、FStrings のコンテンツは FText の「自動ローカライゼーション」 の効果がないことに注意してください。

数値変数

Fname 文字列から数値変数への変換はありません。

FText への変換

float や int 変数を FText を使って FText::AsNumber() へ換することができます。現在のカルチャーでパスされた数を表す FText を作成する関数です。

例:

FText::AsNumber( CurrentHealth )

以下の数値変換が追加されます。

  • FText::AsPercent()

  • FText::AsCurrency()

  • FText::AsDate()

  • FText::AsTime()

比較

FText::EqualTo() または FText::EqualToCaseIgnored() を使い、結果を true または false で受け取り、 2 つの FText の比較ができます。FText::CompareTo() または FText::CompareToCaseIgnored() で文字列を比較すると、 整数値が返されます。

現在のところ FText は、FStrings のように単純な序数の比較でなないため、比較操作用のこういった演算子を公開しません。操作の負荷がわかるように、 通常の演算子を敢えて使わないことにします。

HUD の FText

Canvas

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 クラスの DrawText() 関数内、もしくは DrawHUD() で始まる関数チェーン内にに DrawItem() 関数を呼び出す必要があります。

ブループリントの FText

ブループリントは Text リテラルをサポートしています。Text 値の入力ピンはノードへの値の代入をサポートし、これらの文字列が集められてローカリゼーションを行います。