MRヘッドセットはAcerのがメルカリに定価であったので買いました。
MRのサンプルでカーソル表示、オブジェクトのフォーカスとクリックをUnityで実装したのでまとめます。
①環境
Unity2017.2b11 とりあえず2017.2系の最新使うようにしてます。
OSビルド 16288.1
②参考
https://github.com/Microsoft/MixedRealityToolkit-Unity
基本的にMixedRealityToolkitを利用して実装しています。楽なので
Input回りはこちらが参考になります。
「InputTapTest.unity」が参考になりました。
③実装
3-1.プロジェクトを作成して上記のgithubをダウンロードして「MixedRealityToolkit-Unity/Assets/HoloToolkit/」をプロジェクトに追加
3-2.カーソルの表示
上記のようにMainCamera、Directional light(ライトは別に消さなくてもいいです)を削除
HoloToolkit/Input/Prefabs/MIxeRealityCameraParent
HoloToolkit/Input/Prefabs/Manager(InputManagerでOK)
HoloToolkit/Input/Prefabs/Cursor/Cursor
をシーンに追加
この状態でUnityでプロジェクトを実行するとカーソルが表示されます。
3-3.オブジェクトの設定
Cubeオブジェクト配置して見やすく適当な位置と角度を設定してscriptとmaterialを設定
とりあえず作成したものを
Position(x:0,y:0,z:8)に設定しています。
CureTapResponderとBlue(白色)ってマテリアルを設定してます。
using HoloToolkit.Unity.InputModule;
using System;
using System.Collections;
using UnityEngine;
public class CubeTapResponder : MonoBehaviour, IInputClickHandler, IFocusable
{
public void OnFocusEnter()
{
gameObject.GetComponent().material.color = Color.blue;
}
public void OnFocusExit()
{
gameObject.GetComponent().material.color = Color.white;
}
public void OnInputClicked(InputClickedEventData eventData)
{
gameObject.transform.localScale += 0.05f * gameObject.transform.localScale;
gameObject.transform.Rotate(new Vector3(0f, 30f, 0f));
eventData.Use();
}
}
スクリプトの内容はこんな感じです。
クリック
クリックの管理はIInputClickHandlerのインターフェースで用意されている「OnInputClicked」
メソッドを利用して実装します。サンプルでは回転してオブジェクトを大きくしています。
フォーカス
IFocusableのインターフェースで
「OnFocusEnter」「OnFocusExit」の2つでフォーカス時とフォーカスアウト時の動きを設定します。
サンプルでは色をフォーカス時に青、非フォーカス時に白に戻しています。
作成はこれでです。
実際に実行した結果が以下です。
おかしなところなどあれば指摘していただけるとありがたいです。
動画のものをフォーカスの比較のためにキューブが2つ表示されていますが気にしないでください。
フォーカスが当たらなくなる距離が存在するようなんですがそんなのどこかに載ってたかな。。。
Toolkitの問題か?
とりあえずじゃんじゃんMRやってこう。