7
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

Organization

【Unity】MRTK導入してQuest2のハンドトラッキングでボタンを押す

MRTK-Quest

というツイートを見ました。

Quest2が発売されたということもあるので
MRTK×OculusQuest2×ハンドトラッキング
ボタンを押すところまでやってみようと思います。

バージョン情報

Unity 2019.4.8f1
Oculus Integration Version 20.1
Microsoft Mixed Reality Toolkit v2.5.0
MRTK-Quest v1.1.0

準備

まずはOculus IntegrationをAssetStoreからインポートします。

次にMicrosoft Mixed Reality Toolkitから必要なunitypackageを
ダウンロードしてプロジェクトにインポートします。

今回は、
Microsoft.MixedReality.Toolkit.Unity.Foundation
Microsoft.MixedReality.Toolkit.Unity.Tools
の2つを下記リンクからダウンロードします。

【リンク】:MixedRealityToolkit-Unity

インポートしたら初期設定画面が出ると思うので
Applyを押します。いろいろ必要な設定をやってくれます。
MRTKsetup.png

次にQuest対応のMRTK-Questを導入します。
下記からMRTK-Quest_v110_Core.unitypackage
をダウンロードしてインポートします。

【リンク】:MRTK-Quest


Profileの設定

最初にいろいろな設定が利用可能となるProfileを使える状態にします。

下記画像のように
Mixed Reality Toolkit > Add to Scene and Configure...
を選択すればOKです。

MRTKAddConfig.png

次にMRTK-QuestのProfileを使えるように下記画像のように設定します。

MRTKProfileSet.png


稀にProfileの設定ができないことがあります。(インポートの順番とかバージョンの違いかも)

うまくいかなかったら
下記のサンプルプロジェクトをクローンして
Profileがまとめられたファイルをプロジェクトに丸ごとコピーすれば大丈夫でした。

【リンク】:MRTK-Quest-Sample

Profileがまとめられたファイルのディレクトリは下記です。
MRTK-Quest-Sample\Assets\MRTK.ThirdParty\MRTK-Quest\Profiles


今回はやりませんが、ここまでいろいろダウンロードしたものは
manifest.jsonに自分で書き込めば勝手にインポートしてくれるらしいです。

【参考リンク】:MRTK 2.5 を Unity Package Manager を使って取り込む

【参考リンク】:Oculus Quest 2でMRTK使って豆腐と戯れる最小手順


ポインター、ゲイズ、テレポートを削除

下記はMRTK-Questのデモです。

83885080-dcde6100-a713-11ea-88e2-46883402cfe8.gif

引用元:MRTK-Quest

ただし、これは機能をてんこ盛りにしたバージョンのデモです。
今回は人差し指でボタンを押せる機能だけに絞りたいと思います。

ポインター削除

まずはポインターです。
MixedRealityToolkitInput設定から
下記画像のように不要なポインター機能を削除してPokePointerだけの状態にします。

MRTK-PokePointer.PNG

ゲイズ削除

手の入力を検知するまでゲイズ(HMDの向きに照射されるポインター)が出ます。
これ正直なところどうやって消せばいいかいまいちわかりませんでした。
なのでオブジェクトを非アクティブにするというパワープレイで非表示にしました。

MRTK-CursorVisualOff.PNG

テレポート削除

MixedRealityToolkitTeleport設定からオフにできます。

MRTK-teleport.PNG

ボタンを配置、常にカメラの前に表示する

ボタンはMixed Reality Toolkit > Toolboxから
下記画像のように選択できます。
MRTK-ToolBox.png

Prefabを直接Hierarchyに置いてもOKです。

表示位置を調整してデバッグするのが面倒なので
常にカメラの前に表示します。下記にまとめたScriptを使用します。
【参考リンク】:【Unity(C#)】Lerp、Slerpを使った減速表現

MRTK-Qiita1.gif

デバッグ

ここまででもう下記動画のようにボタンは押せるようになっているはずです。

Editor上でも確認できます。下記にまとめてます。
【参考リンク】:【Unity】Oculus Link使ってEditor上でデバッグ

実機での確認は(ビルドの設定は省いて)1つ設定しなければならない箇所があります。
下記画像の通り、Hands Onlyにする必要があります。

設定用ConfigのディレクトリはAsset/oculus/OculusProjectConfigです。

MRTK-HandOnly.png

ボタンに処理を追加する

ボタンを押すとキューブの表示が切り替わるデモです。

MRTK-Qiita2.gif

コード

using Microsoft.MixedReality.Toolkit.UI;
using UnityEngine;

/// <summary>
/// ボタン押下時のイベントを管理
/// 適当なオブジェクトにアタッチ
/// </summary>
public class ButtonEventManager : MonoBehaviour
{
    /// <summary>
    /// ボタン
    /// </summary>
    [SerializeField] private Interactable _interactableButton;

    [SerializeField] private GameObject _cube;

    void Start()
    {
        _interactableButton.OnClick.AddListener(() =>
        {
            //ボタン押下時行いたい処理
            _cube.SetActive(!_cube.activeInHierarchy);
        });
    }
}

MRTKのボタンにInteractableというコンポーネントがついているので
その中のリスナーにイベント登録しています。

おわりに

VRで物理的なUIを一から自分で作るのは面倒なので
これからもお世話になろうと思います。

参考リンク

Oculus Quest 2でMRTK使って豆腐と戯れる最小手順
手乗りちょまぎょアプリ開発で学ぶ MRTK 入門 (MRTK 2.5 対応)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
7
Help us understand the problem. What are the problem?