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

始め方

必要条件

・Unity 2020.3 LTS 以降
・TextMeshPro 2.1.4 以降

サンプルシーンの展開手順の詳細は以下の記事の[データバインディングとテーマ設定のサンプルシーン]項を参照ください。
bluebirdofoz.hatenablog.com

サンプルシーン

最初のステップとして MRTK Examples パッケージにある様々なデータバインディングのサンプルシーンを見てください。
様々なデータソース MonoBehaviours がどのように構成されているかが確認できます。
一般的にデータバインディングスクリプトはプレハブまたは関連する UX エレメントのセットの最上位の GameObject にのみ配置する必要があります。

また、ほとんどのユースケースではデフォルト値がそのまま機能します。
より高度なケースにでは公開されたプロパティは多くの柔軟性を提供します。

注意

標準的な MRTK UX コンポーネントのテーマ設定を有効にするには MRTK_UX_DATABINDING_THEMING_ENABLED シンボルがプレーヤー設定で定義されている必要があります。
このシンボルを使って、テーマ設定が必要ないときにパフォーマンスへの影響をゼロにできます。

Assets/DataBinding Example/Scenes/DataBindingExamples

様々な可変データシナリオを実演するシーンです。
利用方法はシーンをロードして再生するだけです。以下にいくつかの注意点を示します。

・TextMeshPro コンポーネントのテキスト入力フィールドには{{ firstName }}のような変数があります。
これらのマーカーはそのままローカルのキーパスとして使用されます。

・スプライトやテキストのゲームオブジェクトはデータの受信とビューの更新を管理するデータコンシューマコンポーネントを何らかの形で持っています。

・1つのデータコンシューマは階層の上位に配置することで、同じタイプの複数のコンポーネントで共有することができます。

・データコンシューマは同じゲームオブジェクトまたは階層の上位にある限り、独自のデータソースを見つけることができます。

・親ゲームオブジェクトには Data Source コンポーネントがあり、関連する変数情報を持つすべての子ゲームオブジェクトにデータを提供します。

・コレクションデータコンシューマはプレハブを指定し、そのプレハブに変数データを入力するために使用されるデータコンシューマーを含んでいます。

Assets/UX Theming Example/Scenes/AudioTheming

この例ではテーマを使って、ピアノ用の音源セットと木琴用の音源セットを AudioClip で切り替えています。





Assets/UX Theming Example/Scenes/BatteryLevelExample

この例ではテーマ設定とデータバインディングを組み合わせて、バッテリー残量を数値とアイコンの両方で表示しています。
テーマ設定は「充電中」と「充電していない」のどちらかを選択するために使用されます。

以下のような目的に合うように設計されています。

・すべてのビジュアルアセットはテーマプロファイルとして動作する1つの ScriptableObject に存在することができます。

・「充電」状態のスプライトの数は「充電していない」状態のスプライトの数と異なることがあります。

・報告されたバッテリー残量をどのスプライトに対応させるかのアルゴリズム非線形であり、「充電」状態と「非充電」状態の間で異なることがあります。

注意

このデモの構造はテーマ設定とデータバインディングを組み合わせた良い例ではありません。
モデルとビューを適切に分離するための本番のアプリケーションでは実際のバッテリーの状態(レベルや充電)はスプライト自体のリソースロケータとは別のデータソースで提供されるべきです。

Assets/UX Theming Example/Scenes/UXThemingExample

この例ではアプリケーション全体のテーマを変更します。
また、UX に表示されるさまざまなテキストコンテンツを管理するためのデータソースとして DataSourceGODictionary を使用することを実証しています。
より包括的なシナリオでは DataSourceReflection や DataSourceGOJson など、他のより柔軟なデータソースタイプが必要な柔軟性を提供する可能性があります。