Reflection
概要
実行時にクラスの構造やメンバに関する情報を取得/操作できる仕組み。
「UCLASS」、「UFUNCTION」、「UPROPERTY」などのマクロを用いてリフレクション対象を指定し
ビルド時に「Unreal Header Tool(UHT)」がそれを解析/登録することで、この機能を実現している。
これはC++に本来備わっていない仕組みであり、Unreal Engine独自の拡張によって提供されている。
Reflectionで取得可能な情報
構造体やクラスなどの全体構造
様々なものがあるが、代表的なものは以下となる。
- UField
- UStruct(以下の共通基底で構造体そのものではない)
- UScriptStruct(実際の構造体を示す)
- UClass
- UBlueprintGeneratedClass
- UFunction
- UEnum
変数や関数の引数などの構成要素
様々なものがあるが、代表的なものは以下となる。
また、記載上は単純継承のように表しているが、一部に対しテンプレートや中間クラスを含む複雑な構造を省略している。
- FField
- FProperty
- FEnumProperty
- FStrProperty
- FNameProperty
- FTextProperty
- FArrayProperty
- FMapProperty
- FSetProperty
- FBoolProperty
- FNumericProperty
- TProperty_Numeric
- FByteProperty
- FInt8Property
- FInt16Property
- FIntProperty
- FInt64Property
- FUInt16Property
- FUInt32Property
- FUInt64Property
- FFloatProperty
- FDoubleProperty
- FStructProperty
- FObjectPropertyBase
- TFObjectPropertyBase
- FObjectProperty
- FClassProperty
- FWeakObjectProperty
- FLazyObjectProperty
- FSoftObjectProperty
Reflectionの活用例
アクター上のリフレクション対象変数を一覧で取得する