Oculus Goで車を動かす
UnityではStandard AssetsでVehiclesという、車の挙動を簡単に利用できるアセットが提供されています。
これをOculusGoに対応させて、FPS視点で操作できるようにしてみました。
手順
Vehiclesをインポート
Assets > Import Package > Vehiclesからアセットパッケージをインポートします。
CarプレハブをHierarchyに追加
ProjectのStandard Assets > Vehicles > Prefabs > CarをHierarchyに追加します。
Main CameraをCarの子要素にする
SceneのMain CameraをCarの下にドラッグ&ドロップします。
Main Cameraのtransformを調整
カメラを車が操作しやすい位置と角度にお好みで調整します。
ステージをつくる
車を走らせるためのステージをつくります。
ここでは、Simple Home Stuffというアセットをお借りしてステージとして利用しました。
車とステージのサイズ感を合わせるため、CarのScaleを0.25に設定しています。
Oculus Goのコントローラーから操作できるようにする
CarプレハブにアタッチされているCarUserController.cs
を削除し、新たにCarMovementController.cs
を作成&アタッチします。
ここでは、コントローラーのタッチパッドにアクセルと方向転換、トリガーにブレーキ(バック)を割り当てています。
using UnityEngine;
using UnityStandardAssets.Vehicles.Car;
[RequireComponent(typeof (CarController))]
public class CarMovementController : MonoBehaviour
{
private CarController m_Car;
private void Awake()
{
m_Car = GetComponent<CarController>();
}
private float h;
private float v;
private void Update()
{
OVRInput.Update();
// タッチパッドを触っている座標を元に進む方向を決める
Vector2 touchVec = OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad);
h += touchVec.x * 0.1f * Time.deltaTime;
// タッチパッドを押していたらアクセル
if(OVRInput.Get(OVRInput.Button.One))
{
v += 0.1f * Time.deltaTime;
}
// トリガーを押していたらブレーキ
else if (OVRInput.Get(OVRInput.Button.PrimaryIndexTrigger))
{
v -= 0.1f * Time.deltaTime;
}
else
{
v = 0f;
}
}
private void FixedUpdate()
{
OVRInput.FixedUpdate();
m_Car.Move(h, v, v, 0f);
}
}
レッツビルド!
Oculus Go ドライブ#OculusGo #OculusGoDev pic.twitter.com/pBl9yTJUFs
— m4tcha (@_m4tcha) June 16, 2018