Version: Unity 6.0 (6000.0)
言語 : 日本語
プロパティビジター
PropertyVisitor を使用してプロパティビジターを作成する

プロパティパス

プロパティパスは、コンテナオブジェクト内のプロパティの場所を示す文字列です。

コンセプト

プロパティパスを使用して、特定のパスにあるオブジェクトのデータを取得または設定したり、オブジェクトのサブプロパティのビジターを受け入れたりすることができます。

プロパティパスは文字列で構成され、ルートオブジェクトから特定のプロパティインスタンスを解決します。例えば、パス foo.bar.baz[12] は、foo コンテナにネストされている、bar コンテナの baz リストコンテナの 13 番目の要素を解決します。

プロパティパスを作成および操作するには、Unity.Properties.PropertyPath クラスを使用します。

プロパティパスを使用して、以下を行うことができます。

  • 特定のパスにあるオブジェクトのデータを取得または設定する
  • オブジェクトのサブプロパティに対する訪問者を受け入れる

パフォーマンスの考慮点

Unity.Properties.PropertyPath は不変の構造体型です。プロパティパスを文字列から構成すると、サブ文字列を抽出するためにアロケーションが発生します。

以下の表は、プロパティパスが文字列から構成されている場合のアロケーション動作のリストです。

文字列 長さ アロケーション回数 アロケーションの理由
"Path" 1 0 文字列をそのまま使用します。
"Path.To" 2 2 文字列を 2 つのパーツに分割します。
"Path.To[2]" 3 3 文字列を 2 つのパーツに分割し、インデックスを抽出します。
"Path.To[2].My" 4 4
"Path.To[2].My.Value" 5 6 追加パーツの配列を割り当てます。

以下の表は、プロパティパスがパーツで構成される場合のアロケーション動作のリストです。

文字列 長さ アロケーション回数 アロケーションの理由
PropertyPath.FromName("Path") 1 0
PropertyPath.AppendName(previous, "To") 2 0
PropertyPath.AppendIndex(previous, 2) 3 0
PropertyPath.AppendName(previous, "My") 4 0
PropertyPath.AppendName(previous, "Value") 5 1 追加パーツの配列を割り当てます。

パフォーマンスを最適化し、メモリの割り当てを回避するには、以下を行います。

  • 初期化ルーチン中にプロパティパスを初期化してキャッシュします。
  • 文字列から構成する代わりに、プロパティパスのパーツを最大 4 つ結合または追加します。

追加リソース

プロパティビジター
PropertyVisitor を使用してプロパティビジターを作成する