構造体 は、メンバーのプロパティを整理および操作する際に便利なデータ構造です。Unreal Engine のリフレクション システムは、構造体を UStruct
として認識しますが、構造体は UObject エコシステムの一部ではないため、UClasses 内で使用することはできません。
UStruct
は、同じデータ レイアウトを使用するUObject
よりも高速に作成できます。
UStruct は UProperty をサポートしますが、ガベージ コレクション システムによって管理されておらず、UFunction の機能も使用できません。
UStruct を実装する
構造体を UStruct
にするには、次の手順に従います。
構造体を定義する ヘッダ (.h) ファイルを開きます。
C++ 構造体を定義するには、構造体の定義の上に
USTRUCT
マクロを置きます。GENERATED_BODY()
マクロを定義の最初の行として含めます。
結果は次の例のようになります。
USTRUCT([Specifier, Specifier, ...])
struct FStructName
{
GENERATED_BODY()
};
構造体のメンバー変数に UPROPERTY
のタグを付けると、Unreal のリフレクション システムおよびブループリント スクリプトで認識されるようになります。エンジンおよびエディタのさまざまなモジュールでプロパティがどのように動作するかを確認するには、UProperty 指定子のリストを参照してください。
構造体指定子
構造体指定子 は、エンジンとエディタのさまざまな側面で構造体がどのように動作するかを制御するメタデータを提供します。
|構造体指定子| エフェクトの内容|
|Atomic
|この構造体を常に 1 つの単位としてシリアル化する必要があることを示します。このクラスに対して自動生成コードは作成されません。ヘッダはメタデータをパースするためにのみ提供されます。 |
|BlueprintType
|この構造体を、ブループリントの変数に使用できる型として公開します。 |
|NoExport
|このクラスに対して自動生成コードは作成されません。ヘッダはメタデータを解析するためにのみ提供されます。 |
ベスト プラクティスとヒント
以下は、UStruct
を使用するときに覚えておくと役立つヒントです。
UStruct
は、Unreal Engine のスマート ポインタとガベージ コレクション システムを使用して、ガベージ コレクションによるUObjects
の削除を防ぐことができます。構造体の使用は、単純なデータ型に対して最適です。プロジェクト内でより複雑なインタラクションを行う場合は、代わりに
UObject
またはAActor
サブクラスを作成することをお勧めします。UStructs
は レプリケーションの対象として 考慮されません。ただし、UProperty
変数はレプリケーションの 対象となります。Unreal Engine では、構造体の Make 関数と Break 関数を自動的に作成できます。
Make は
BlueprintType
タグ付きのUStruct
に表示されます。UStruct に少なくとも 1 つの
BlueprintReadOnly
またはBlueprintReadWrite
プロパティがある場合、Break が表示されます。 1.Break が作成する純粋なノードは、BlueprintReadOnly
またはBlueprintReadWrite
のタグが付いたプロパティごとに 1 つの出力ピンを提供します。