LoginSignup
2
4

More than 5 years have passed since last update.

Oculus Goでサクッと車を動かす

Posted at

Oculus Goで車を動かす

UnityではStandard AssetsでVehiclesという、車の挙動を簡単に利用できるアセットが提供されています。
これをOculusGoに対応させて、FPS視点で操作できるようにしてみました。

20180616-202651.jpg

手順

Vehiclesをインポート

Assets > Import Package > Vehiclesからアセットパッケージをインポートします。

Screenshot 2018-06-15 09.10.50.png

CarプレハブをHierarchyに追加

ProjectのStandard Assets > Vehicles > Prefabs > CarをHierarchyに追加します。

Cursor_and_Unity_2018_2_0b6_Personal__64bit__-_Untitled_-_SafariParkVR_-_Android__Personal___Metal__and_Screenshot_2018-06-15_09_11_27.png

Main CameraをCarの子要素にする

SceneのMain CameraをCarの下にドラッグ&ドロップします。

Screenshot 2018-06-15 09.11.51.png

Main Cameraのtransformを調整

カメラを車が操作しやすい位置と角度にお好みで調整します。

Cursor_and_Unity_2018_2_0b6_Personal__64bit__-_Demo_unity_-_SafariParkVR_-_Android__Personal___Metal__and_Oculus_Goのコントローラーを表示させる_-_Qiita.png

ステージをつくる

車を走らせるためのステージをつくります。

Cursor_and_Unity_2018_2_0b6_Personal__64bit__-_Demo_unity_-_SafariParkVR_-_Android__Personal___Metal_.png

ここでは、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);
    }
}

レッツビルド!

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4