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の活用例

アクター上のリフレクション対象変数を一覧で取得する