TSubclassOf

TSubclassOf は UClass 型に安全性を提供するテンプレート クラスです。例えば、デザイナーがダメージタイプを指定できる Projectile クラスを作成しているとします。タイプ UClass の UPROPERTY を作成して、デザイナーが常に UDamageType から派生したクラスをアサインしてくれるよう期待するか、もしくは TSubclassOf テンプレートを使って強制的に選択するようにします。次のサンプル コードでその違いが分かります。

    /** ダメージタイプ */
    UPROPERTY(EditDefaultsOnly, Category=Damage)
    UClass* DamageType;

Vs.

    /** ダメージタイプ */
    UPROPERTY(EditDefaultsOnly, Category=Damage)
    TSubclassOf<UDamageType> DamageType;

2 つ目の宣言で、プロパティの選択肢として UDamageType から派生したクラスのみをリストするように、エディタのプロパティ ウィンドウに指示しています。最初の宣言では、どの UClass も選択することができます。それを表した画像がこちらです。

image alt text

StrategyGame の Projectile ブループリントからの画像です。

この UPROPERTY 安全性に加えて、C++ レベルでの型安全性も提供されています。互換性のない TSubclassOf タイプをお互いにアサインしようとすると、コンパイル エラーが発生します。汎用の Uclass をアサインしようとすれば、アサインメントが可能であることを検証するためにランタイム チェックが実行されます。ランタイム チェックが失敗すると、値が nullptr となります。

    UClass* ClassA = UDamageType::StaticClass();

    TSubclassOf<UDamageType> ClassB;

    ClassB = ClassA; // ランタイムチェックを実行します

    TSubclassOf<UDamageType_Lava> ClassC;

    ClassB = ClassC; // コンパイル時間チェックを実行します
タグ
このページは Unreal Engine の前のバージョン用です。現在リリースされている Unreal Engine 5.3 に対して更新は行われていません。
Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル