はじめに
カメラの動きを制限したい
HMDの動きをトラッキングされちゃうと困っちゃうときってありますよね.
回転トラッキングを切りたいんですが,位置トラッキングを切る記事はあれど回転トラッキングを切る方法が見つかりません.
「VR用のカメラの前にUIでRawImageを張り付けて,別のカメラで撮影したイメージを描写する」
なんてことをやってたんですが,カメラ位置の調整がとんでもなく面倒です.もしくは不可能です.
ということで探しました.
視点固定の方法
XRDevice.DisableAutoXRCameraTracking()
トラッキングをオフするコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
public class CameraControlForVR : MonoBehaviour
{
[SerializeField] Camera target;
// Use this for initialization
void Start()
{
XRDevice.DisableAutoXRCameraTracking(target, false);
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown("a"))
{
XRDevice.DisableAutoXRCameraTracking(target, false);
}
if (Input.GetKeyDown("s"))
{
XRDevice.DisableAutoXRCameraTracking(target, true);
}
}
}
- インスペクタでCameraにVR用のカメラを指定してあげる
- aを押下するとトラッキングOn
- sを押下するとトラッキングOff
という単純なスクリプトです.
結果
きちんとカメラの姿勢・位置が固定されました.
描写自体が止まっているように見えますが,後ろで動いているものはきちんと動いて見えます.
結論
視点を強制的に固定する方法がわかった.
問題点
回転だけでなく位置トラッキングも切れる
位置だけはトラッキングしたいんだよなあというときには使えません.
工夫の必要がありそうです.
再開時に視点が飛ぶ
トラッキングを再開したときに向いている向きに視点が飛びます.
シームレスに変化させたいときはこれまた工夫がいりそうです.
ひとまず備忘録として.
暇があれば文章を整えます.