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.

TSubclassOf

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

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

Vs.

/** 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