UE 4の文字列クラス:FName、FText、FString


UE 4の文字列クラス:FName、FText、FString
前言
幻エンジンの開発言語がC++であることはよく知られているので、文字列クラスといえばまずC++標準ライブラリの文字列クラスを思い浮かべる:std::string.std::stringパワフルではないとは言えませんが、UE 4ではそれをそのまま使うのではなく、独自の文字列クラスを実現しています.実際には3つの文字列クラスです.FNameFTextFString.これはいったいどうしてですか.これは余計な車輪作りの行為のように見えるが、その背後にはエンジン使用者への思いやりがある.std::string大きな文字列クラスであるが、ゲームの開発における特定のアプリケーションシーンのニーズ、例えば性能、多言語ローカライズなどのアプリケーションシーンを満たしていないため、UE 4の3つの文字列クラスが存在する.
FName
その名の通りFNameこの文字列類は、あるものに名前を付ける(Name)ためのもの、つまり一つのものとしてのIDです.ここでは、エディタContentブラウズウィンドウで表示されるさまざまなリソース、ダイナミックマテリアルインスタンスの設定可能なパラメータ、モデルスケルトンの特定のボーン、キャラクタmeshでattach武器に使用されるsocketなどです.大きなゲームではリソースが多く、特定のリソースを迅速に特定できることが特に重要です.つまり、性能に高い要求があります.2つの文字列が同じかどうかを判断する例として、std::stringの比較は文字列の内容を直接比較し、時間複雑度値が最悪の場合はO(M*N)である.パフォーマンスを向上させるにはどうすればいいですか?これらの一般的な操作時間の複雑さを最も比較するとO(1)である.FNameその目的を達成するために設計されたものです.FNameオブジェクトが作成されると、文字列の内容に基づいてhash値が計算され、このhash値に基づいて元の文字列がhashテーブルに格納されます.FNameオブジェクトには自分のいるhashテーブルのインデックス値が記録されます.これにより、比較ロジックを実現する際に、文字列の内容を比較する必要がなく、インデックス値が等しいかどうかを直接比較します.またFNameオブジェクトは可変オブジェクト(immutable)であり、作成後は変更できない.この読み取り専用プロパティは、天然のスレッドを安全にします.もちろん、可変オブジェクトには他にもメリットがあります.具体的には、次のwikiリンクを参照してください.
Immutable object
注意が必要なのはFName大文字と小文字を区別しないことです.
FText FNameに比べて、FText類はやや重く見えます.幻エンジンはゲーム多言語サポートに実験的な機能サポートを提供し,その中でFTextというクラスをめぐって実現した.あなたのゲームでプレイヤーが見えるテキストはすべてFTextで行うべきです.例えばUIのテキスト表示です.要するに、この実験的な機能を利用して多言語サポートを容易に実現したい場合は、FTextを使用します.
FString FString標準ライブラリに最も近いstd::stringの文字列クラスであり、FNameおよびFTextとは異なり、作成後は変更可能(mutable)である.文字列を逆シーケンスしたり、サブストリングを取得したりするなど、文字列を大量に操作する方法を提供します.あなたのプログラムの内部では、URLを組み立てるなどの論理をするときに使います.修正可能な特性のため、パフォーマンスにはそれほど友好的ではありません.また、オンライン・スレッド間で共有する場合は注意する必要があります.
まとめFNameFTextFStringの3文字列クラス実現の出発点が異なるので、エンジン利用者には使用シーンを区別し、異なるシーンに対応する文字列クラスを使用することで、性能と機能の両立が図れる.