ドキュメント

Unity Engine

Unity Engine

プロパティパス

Understand the role of property paths and the performance considerations when using them.
読み終わるまでの所要時間 4 分最終更新 1ヶ月前

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

コンセプト

プロパティパスを使用して、特定のパスにあるオブジェクトのデータを取得または設定したり、オブジェクトのサブプロパティのビジターを受け入れたりすることができます。
プロパティパスは文字列で構成され、ルートオブジェクトから特定のプロパティインスタンスを解決します。例えば、パス
foo.bar.baz[12]
は、
foo
コンテナにネストされている、
bar
コンテナの
baz
リストコンテナの 13 番目の要素を解決します。
プロパティパスを作成および操作するには、
Unity.Properties.PropertyPath
クラスを使用します。
プロパティパスを使用して、以下を行うことができます。
  • 特定のパスにあるオブジェクトのデータを取得または設定する
  • オブジェクトのサブプロパティに対する訪問者を受け入れる

パフォーマンスの考慮点

Unity.Properties.PropertyPath
は不変の構造体型です。プロパティパスを文字列から構成すると、サブ文字列を抽出するためにアロケーションが発生します。
以下の表は、プロパティパスが文字列から構成されている場合のアロケーション動作のリストです。

文字列

長さ

アロケーション回数

アロケーションの理由

"Path"
10文字列をそのまま使用します。
"Path.To"
22文字列を 2 つのパーツに分割します。
"Path.To[2]"
33文字列を 2 つのパーツに分割し、インデックスを抽出します。
"Path.To[2].My"
44
"Path.To[2].My.Value"
56追加パーツの配列を割り当てます。
以下の表は、プロパティパスがパーツで構成される場合のアロケーション動作のリストです。

文字列

長さ

アロケーション回数

アロケーションの理由

PropertyPath.FromName("Path")
10
PropertyPath.AppendName(previous, "To")
20
PropertyPath.AppendIndex(previous, 2)
30
PropertyPath.AppendName(previous, "My")
40
PropertyPath.AppendName(previous, "Value")
51追加パーツの配列を割り当てます。
パフォーマンスを最適化し、メモリの割り当てを回避するには、以下を行います。
  • 初期化ルーチン中にプロパティパスを初期化してキャッシュします。
  • 文字列から構成する代わりに、プロパティパスのパーツを最大 4 つ結合または追加します。

追加リソース