MRが楽しい

MRやVRについて学習したことを書き残す

Mixed Reality Toolkit 3 パブリックプレビューのドキュメントを少しずつ読み解く データバインディングとフレームワークのテーマ化(テーマ)

本日は Mixed Reality Toolkit 3 の調査枠です。
Mixed Reality Toolkit 3 パブリックプレビューのドキュメントを少しずつ翻訳しつつ読み進めていきます。

Mixed Reality Toolkit 3 のドキュメント

以下のドキュメントを読み進めていきます。
docs.microsoft.com

今回は「データバインディングフレームワークのテーマ化」のページの「テーマ」に関する項目を読み進めます。
docs.microsoft.com

テーマ

テーマ設定ではデータソースとデータコンシューマのすべての仕組みを使用します。
ゲームオブジェクトの任意の階層を(静的であるか他のデータソースに動的にデータバインドされているかに関わらず)テーマ化することができます。
これにより、データバインディングとテーマの両方を組み合わせて適用できます。
別のデータソースからのデータをテーマにすることもできます。

ブロック図とデータフロー

画像は参照ページより引用

MRTKテーマ

テーマは一度に多くの UX 要素の見た目を変更する機能です。
通常、テーマを指定するために必要なすべてのデータは ScriptableObject などの単一のデータソースによって提供されます。
テーマデータを必要に応じて提供したり、目的に基づいて論理グループに分割したりすることもできます。

画像は参照ページより引用

データバインディングと組み合わせたMRTK3テーマ

データバインディングとテーマは 1 つの UX 要素に対して共存できます。
個々の UX 要素は同時にテーマを設定し、データバインドすることができます。
このシナリオではデータソースからの情報を使用して正しいテーマキーパスを導出する一般的なフローがあります。
このキーパスはテーマのデータソースからオブジェクトを取得するために使用されます。
(通常は ScriptableObject プロファイルですが、キーパスを解決できるデータのソースである可能性もあります)

テーマとデータバインディングの構成を簡素化するために、インスタンス化時に BindingConfigurator によって処理されるバインドプロファイルを作成できます。

BindingConfigurator はバインディングプロファイルを処理して、プレハブ内のテーマとなるアセットを決定します。
これにより、バインドされたデータ要素とテーマとなる要素の両方をキーパスと関連付けます。
そして、これらの視覚的要素を適切なキーパスセレクタにバインドするために適切なデータコンシューマを追加します。
これは通常、プレハブ自体の外部にある一つまたは複数のデータソース内の特定のデータを参照するために使用されます。

テーマデータはバインディングプロファイルで特定された各キーパスのデータを含むデータソースによって提供されます。

ThemeProvider ヘルパースクリプトを使えば ScriptableObject をテーマ設定のためのデータソースとして簡単に利用することができます。

標準の UX テーマは ThemeProvider の[DataSourceReflection]にバインドされている MRTK_UX_ThemeProfile(ScriptableObject) によって提供されています。

画像は参照ページより引用

埋め込みデータソース

埋め込みデータソースは次の 2 つの状況で利用すると適切です。

1. プレハブの各インスタンスに異なるテーマ設定があり、独自の個別のデータソースが必要な場合。
2. このプレハブのすべてのインスタンスが 1 つの共通の永続化されたテーマプロファイル(ScriptableObjectなど)で管理され、かつ埋め込みデータソースを使うことで外部依存関係を確立する必要がない場合。

DataSourceReflection

DataSourceReflection はリフレクションを使用して任意の C# 構造体またはクラスをデータソースに変換し、キーパスをフィールド/プロパティ/ネストされたクラス/配列/リスト/ディクショナリにマッピングします。
これらは ScriptableObject や、テーマデータが存在する他の C# 構造体やクラスと関連付けることができます。
データを含むインスタンス化されたオブジェクトは依存の設定が可能で、実行時に変更することができます。

1. Scriptable Object

多くのプレハブ間で共有される静的テーマに役立ちます。

2. 永続化されていない C# 構造体またはクラス

テーマの動的な実行時の変更に役立ちます。

DataSourceJson

データが json テキストとして存在する場合、これは json DOM へのキーパスのマッピングを管理します。
バイナリアセットは Unity の Resources や StreamingAssets あるいは URL から取得することができます。

DataSourceDictionary

これはフラットリストで十分にニーズを満たせる場合や、ラピッドプロトタイピングのためのシンプルなオプションです。
テキスト、Unityアセット(マテリアル、スプライト、画像など)、Resources、StreamingAssets、さらにはURL経由で外部から取得できるものなど、すべてのテーマ設定アセットがサポートされています。

カスタム

IDataSource インターフェースを実装し、DataSourceBase または DataSourceGOBase を継承する任意のカスタムデータソースを使用してカスタムニーズを満たすことができます。