MRTK3の調査

はじめに
GPT4のWeb Browsing機能を使って要約してます。
MRTK3の概要
MRTK3 (Mixed Reality Toolkit 3)は、MicrosoftのMixed Reality Toolkit for Unityの第3世代であり、UnityのXR ManagementシステムとXR Interaction Toolkitの上に構築されています。Microsoftが主導するオープンソースプロジェクトで、Unityでのクロスプラットフォームのミックスリアリティ開発を加速することを目的としています。
クロスプラットフォーム入力システムとUIの構築ブロック
MRTK3はクロスプラットフォームの入力システムを提供し、空間インタラクションとUIの構築ブロックを提供します。
エディタ内シミュレーションを通じた迅速なプロトタイピング
エディタ内シミュレーションにより、変更をすぐに確認でき、迅速なプロトタイピングが可能になります
拡張可能なフレームワーク
開発者はコアコンポーネントを交換する能力を持っており、MRTK3は拡張可能なフレームワークとして動作します。
多様なプラットフォームのサポート
OpenXR XRデバイス、Microsoft HoloLens 2、Meta Quest(実験的)、Windows Mixed Reality(実験的)、SteamVR(実験的)、Oculus Rift on OpenXR(実験的)、Lenovo ThinkReality A3(実験的)、およびWindows Traditional flat-screen desktop(実験的)など、幅広いプラットフォームをサポートしています。
アーキテクチャの改善
Unity XR Interaction ToolkitとUnity Input Systemの上に構築されており、OpenXRに焦点を当てています。
パフォーマンスの改善
ほとんどの機能とシステムが再設計され、HoloLens 2や他のリソース制約のあるモバイルプラットフォームでの最大パフォーマンスが目指されています
ユーザーインタフェースの改善
新しいインタラクションモデルや更新されたMixed Reality Design Language、Unity Canvas + 3D UXなどが導入されています。
バージョニング
MRTK3では、各パッケージが個別にバージョン管理されており、Semantic Versioning 2.0.0仕様に従います。
早期プレビューパッケージ
一部のMRTK3のコンポーネントは他のものよりも開発プロセスの初期段階にあり、これらはMixed Reality Feature ToolとUnity Package ManagerでEarly Previewの名前で識別できます。
UXビルディングブロック
ボタン、境界制御、オブジェクト操作、ハンドメニュー、ニアメニュー、スライダー、ソルバー、ダイアログ、スレートなど、多くのUXコントロールとインタラクションモデルが提供されています。

ObjectManipulatorについて
ObjectManipulator は、手を使ってオブジェクトの移動、回転、拡大縮小を行うコンポーネントです。
制限の追加
ConstraintManagerを設定することで制限を設定可能
- MoveAxisConstraint : 移動軸に制限
- RotationAxisConstraint : 回転軸に制限
- MinMaxScaleConstraint : 拡大縮小のサイズに制限
参考:

MRTK XR Rigについて
MRTK XR Rig には既に Main Camera ゲームオブジェクトが含まれているので、既存の Main Camera ゲームオブジェクトを削除

Solverについて
ソルバーは事前に定義されたアルゴリズムを使用して、オブジェクトの位置と方向の計算を容易にするコンポーネントです。
ソルバーは、すべてのソルバーの派生元である基本抽象クラスです。Solver Handler は、トラッキングする情報に関する定義を行います。設定項目には、[Tracked Target Type] で Head や Hand Joint などがあります。

BoundsControlについて
Interactableオブジェクトに対して、その範囲を可視化するコンポーネントです。
範囲内に限りでオブジェクトに対するインタラクションが可能となります。

ハンドメニュー
HandMenuのプレハブをSceneにDDすることで利用可能です。
ハンドメニューの利用
以下の機能を実装してみます
- ボタンを押すとDirectionalLightがオンオフ
- ボタンを押すとCubeが一個任意の場所に生成する
スクリプトは以下
using UnityEngine;
using MixedReality.Toolkit.UX;
public class HandMenuActions : MonoBehaviour
{
public GameObject lightObject;
public GameObject cubePrefab;
// ライトのオン/オフを切り替えるメソッド
public void ToggleLight()
{
if (lightObject != null)
{
lightObject.SetActive(!lightObject.activeSelf);
}
}
// Cube を生成するメソッド
public void GenerateCube()
{
if (cubePrefab != null)
{
// 任意の位置に Cube を生成
Vector3 randomPosition = new Vector3(Random.Range(-5f, 5f), Random.Range(0.5f, 3f), Random.Range(-5f, 5f));
Instantiate(cubePrefab, randomPosition, Quaternion.identity);
}
}
}
Sceneにボタンを配置します
このボタンに対して、インスペクター上でPressable ButtonとHandMenuActionsの設定をします。
以下の例ではボタンを押すとGenerateCubeが実行されるようにしています。
実行すると以下のようになります