本日はMRTKの調査枠です。
〇UnityでのHoloLensデバイスの座標の扱い
HoloLens(1st),HoloLens 2ではUnityの原点=(0,0,0)がアプリケーションの起動時の座標になります。
これは位置だけではなく角度も同様で、アプリケーションを起動した方向を基準に軸が定まります。
この特性上アプリケーション起動時はユーザーができるだけ静止しているほうがより良い体験が行えます。(起動する場所や向きによってはSpatialMeshにオブジェクトが埋もれてしまう現象が発生します。)
しかし、ユーザーによっては起動時の待ち時間に動いてしまう場合も想定されます。
この問題を解消するためにカメラ(ユーザー)に沿ってオブジェクトを配置するようにします。
〇カメラに合わせてオブジェクトを配置する。
MRTKには[HeadPositionOffset]という名前のコンポーネントが提供されています。
[HeadPositionOffset]を使用することでオブジェクトをユーザーの位置に合わせて配置することができます。
// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using UnityEngine; namespace Microsoft.MixedReality.Toolkit.Utilities { /// <summary> /// Set the content around the camera height /// </summary> [AddComponentMenu("Scripts/MRTK/SDK/HeadPositionOffset")] public class HeadPositionOffset : MonoBehaviour { public Vector3 HeadOffset = new Vector3(0, 0, 1f); private bool started = false; private void Start() { transform.position = CameraCache.Main.transform.position + HeadOffset; started = true; } private void OnEnable() { if (started) { transform.position = CameraCache.Main.transform.position + HeadOffset; } } } }
中身は非常に簡単で、主な処理は
transform.position = CameraCache.Main.transform.position + HeadOffset;
になります。
これは自身の位置をカメラの座標+指定した任意のオフセットに変位させるという処理になります。
これによってオブジェクトを表示する際など確実にユーザーの目に入るような位置に配置することができます。