HoloLens 2 開発入門 ~ManipulationHandlerとAppBar~(Unity2018.4.2f1、MRTKv2.2)


前回の記事 HoloLens 2 開発入門 ~BoundingBoxとAppBar~(Unity2018.4.2f1、MRTKv2.2) では、Cubeの移動ができません。
MRTKのManipulationHandlerを用いれば、Cubeの移動・回転・スケールを変更することが可能です。
しかし、AppBarと併用するとAdjust中に回転やスケールを変更したいのに誤って移動してしまい困難だったため、Adjust中は移動しない設定にしてみました。他の案としては、手のメッシュを表示して、それぞれの操作時の挙動を変えるなどの工夫でもいいかと思います。

開発環境

  • HoloLens 2
  • MRTK v2.2.0
  • Unity 2018.4.2f1
  • Visual Studio 2019
  • Unity Hub 2.2.2

仕組み

AppBarのStateがAppBar.AppBarStateEnum.Manipulationの時にManipulationHandlerをfalse、それ以外の時にManipulationHandlerをtrueにします。

1.前回の記事に従ってプロジェクトを作成してください
2.CubeにManipulationHandlerをアタッチ、図のようにHost Transform/One Handed Only/Move Scale/Eventsのパラメータを設定します
3.ManipulationHandlerManager.csを作成(下に記述)、Cubeにアタッチします
4.Cubeの子オブジェクトのAppBarをManipulationHandlerManagerのAppBarにアタッチします

プログラム

ManipulationHandlerManager.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.MixedReality.Toolkit.UI;

public class ManipulationHandlerManager : MonoBehaviour
{
    public AppBar appBar;
    private AppBar.AppBarStateEnum state;

    // Update is called once per frame
    void Update()
    {
        state = appBar.GetComponent<AppBar>().State;
        // Debug.Log(state);

        if (state == AppBar.AppBarStateEnum.Manipulation){
            this.GetComponent<ManipulationHandler>().enabled = false;
        } else {
            this.GetComponent<ManipulationHandler>().enabled = true;
        }
    }
}

デモ

参考文献