カメラの向きに合わせてタッチパッドで移動する
この記事はUnityにて、Oculus Goのコントローラーのタッチパッドを利用してカメラの向きに合わせて移動するための手順を説明しています。
サンプル
https://youtu.be/khIxigbQ-f4
履歴
2018.6.4 :トリガー押下でのモード切り替えを追加
プロジェクトをOculus Go向けに調整
AssetStoreにてOculus Integrationをインストールして、Build設定など一通り行う。
Playerオブジェクト作成
ヒエラルキー上を右クリックで表示したメニューから"Create Empty"を選びオブジェクトを作成する。名前はわかりやすいように"Player"とでもしておく。
初期位置だと床にめりこんでしまうため、Transform > Position > Yは1〜1.5くらいにしておく(x,zは0)。
https://gyazo.com/00cf49c4eb6535ac0cd7ef9250f3ea6b
おそらく既に配置しているカメラ(OVRCameraRig)を、Playerオブジェクト下に配置する。
この時OVRCameraRigのPositionは(0,0,0)にする。
https://gyazo.com/f2c20f4f8ce562733678b1367a850212
PlayerオブジェクトにAdd Componentで「PlayerController」的な名前でScriptを追加する。
(が、Oculus IntegrationにPlayerController.csがあるのでPlayerController2というダサい名前にする)
FixUpdateでカメラ移動を実装
PlayerController2スクリプトをダブルクリックすればなんかしらテキストエディタが開くので、以下を上書き(コピペ)する。
code:PlayerController2.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController2 : MonoBehaviour {
//トリガー押下中は前後ではなく上下方向の移動モードと切り替える機能をOnにする
public bool TriggerIsUpDown = false;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void FixedUpdate()
{
OVRInput.FixedUpdate();
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
Vector2 vector = new Vector2(x, z);
bool triggerPressing = Input.GetButton("Fire1");
//コントローラ左右両対応
Vector2 vector = OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad);
bool triggerPressing = OVRInput.Get(OVRInput.Button.PrimaryIndexTrigger);
//Playerの自位置を取得
Transform trans = GetComponent<Transform>();
//ワールド空間でのカメラのforward(up)を取得、正規化
var padUpDir = (TriggerIsUpDown && triggerPressing) ? Vector3.up : Vector3.forward;
Vector3 forward = Camera.main.transform.TransformDirection(padUpDir);
forward.Normalize();
//ワールド空間でのカメラのrightを取得、正規化
Vector3 right = Camera.main.transform.TransformDirection(Vector3.right);
right.Normalize();
//カメラのforward(up), rightに対してタッチパッドのx,yを加算
forward *= vector.y * Time.deltaTime;
right *= vector.x * Time.deltaTime;
//Player位置をright+forward(up)の加算結果位置に移動
trans.Translate(right + forward);
}
}
以上で、Oculus Goのタッチパッド操作によりカメラ視点での前後左右移動が可能になる。
インスペクタ上で「TriggerIsUpDown」をチェックすればトリガー押下中はパッドの前後は上下の移動になる。
トリガーを他の用途で使うようならチェックしない方が良い。
https://gyazo.com/5ac00228c99ea7d600a6a3d5688fdd64