MRが楽しい

MRやVRについて学習したことを書き残す

Oculus Goアプリでコントローラ操作のイベントを取得する

本日は技術調査枠です。
Oculus Goアプリでコントローラ操作のイベントを取得する方法について調べました。

前提条件

Oculus Go向けのUnityプロジェクトを作成し、Oculus Integrationをインストールしていることが前提となります。
bluebirdofoz.hatenablog.com
bluebirdofoz.hatenablog.com
bluebirdofoz.hatenablog.com

コントローラ利用のサンプルシーン

Oculus Integrationをインストールした直後の状態であれば、サンプルシーンが利用できます。
Assets/Oculus/VR/Scenes 配下にある GearVRControllerTest.unity シーンを開いてビルドします。
f:id:bluebirdofoz:20190104103131j:plain

サンプルシーンを起動すると以下のようなテキスト欄が表示されます。
コントローラから取得できる情報(回転やトリガーイベント)がリアルタイムで更新されます。
f:id:bluebirdofoz:20190104103143j:plain

コントローラの情報取得に関するコードは Assets/Oculus/VR/Scripts/Util 配下の OVRGearVrControllerTest.cs にあります。
f:id:bluebirdofoz:20190104103159j:plain

公式のドキュメントは以下になります。合わせて確認すればコントローラ操作に関する一通りの実装ができます。
・OVRInput
https://developer.oculus.com/documentation/unity/latest/concepts/unity-ovrinput/

トリガーイベントの取得

既存のシーンにコントローラのトリガーイベントを追加する場合についてです。
サンプルとして以下のようなトリガーイベントに合わせてオブジェクトを回転するスクリプトを作成しました。
・TriggerManager.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TriggerManager : MonoBehaviour
{
    // Use this for initialization
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {
        if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger))
        {
            Debug.Log("Trigger");
            ChangeRotate();
        }
    }
    void ChangeRotate()
    {
        float YAngle = transform.localEulerAngles.y;
        transform.localEulerAngles = new Vector3(0.0f, YAngle + 30.0f, 0.0f);
    }
}

OculusGo向けのビルド設定のみを行った初期シーンにCubeオブジェクトを追加し、本スクリプトをアタッチします。
f:id:bluebirdofoz:20190104103245j:plain

このままビルドしてもコントローラの情報を取得する設定が行われていないため、トリガーイベントを取得できません。
まず、Assets/Oculus/VR/Prefabs 配下にある OVRCameraRig.prefab を Hierarchy にドラッグします。
f:id:bluebirdofoz:20190104103421j:plain

OVRCameraRig はカメラを含むので、既存の MainCamera オブジェクトは削除するか無効化しておきます。
f:id:bluebirdofoz:20190104103435j:plain

この OVRCameraRig を追加したプロジェクトであれば、上記の OVRInput によるイベント取得が可能になります。
プロジェクトをビルドし、コントローラのトリガーを引くと Cube が回転します。
f:id:bluebirdofoz:20190104103449j:plain