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

/** type of damage */
UPROPERTY(EditDefaultsOnly, Category=Damage)
UClass* DamageType;


/** type of damage */
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; // Performs a runtime check

TSubclassOf<UDamageType_Lava> ClassC;

ClassB = ClassC; // Performs a compile time check
Select Skin

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback