Open6

MRTK3の調査

0y00y0

はじめに

GPT4のWeb Browsing機能を使って要約してます。

MRTK3の概要

MRTK3 (Mixed Reality Toolkit 3)は、MicrosoftのMixed Reality Toolkit for Unityの第3世代であり、UnityのXR ManagementシステムとXR Interaction Toolkitの上に構築されています。Microsoftが主導するオープンソースプロジェクトで、Unityでのクロスプラットフォームのミックスリアリティ開発を加速することを目的としています​。
https://learn.microsoft.com/en-us/windows/mixed-reality/mrtk-unity/mrtk3-overview/

クロスプラットフォーム入力システムと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コントロールとインタラクションモデルが提供されています​。

0y00y0

ObjectManipulatorについて

ObjectManipulator は、手を使ってオブジェクトの移動、回転、拡大縮小を行うコンポーネントです。

https://learn.microsoft.com/ja-jp/windows/mixed-reality/mrtk-unity/mrtk3-spatialmanipulation/packages/spatialmanipulation/object-manipulator

制限の追加

ConstraintManagerを設定することで制限を設定可能

  1. MoveAxisConstraint : 移動軸に制限
  2. RotationAxisConstraint : 回転軸に制限
  3. MinMaxScaleConstraint : 拡大縮小のサイズに制限

参考:

https://bluebirdofoz.hatenablog.com/entry/2020/10/27/231952
https://www.shihonakaoka.com/knowledge/_MRTK3ObjectManipulator.php

0y00y0

Solverについて

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

https://learn.microsoft.com/ja-jp/windows/mixed-reality/mrtk-unity/mrtk3-spatialmanipulation/packages/spatialmanipulation/solvers/solver

0y00y0

ハンドメニュー

https://learn.microsoft.com/ja-jp/windows/mixed-reality/design/hand-menu

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が実行されるようにしています。

実行すると以下のようになります