すだちキャンパス

すだちキャンパス

やってみたこと、学んだことなどのメモ。

VR空間で車を乗り回してみた

こんにちは。
VR空間を動き回る手段が欲しいなと思ったので、車を作ってみました。
作り方をメモしておきます。

環境

  • unity 2018.2.1f1
  • HTC VIVE

準備

ます、Unity の Standard Assets にある車を使うので、まず Asset Store から Standard Assets をインポートします。
(Assets > Import Package で既に Standard Assets がある方はそのままインポートしてください。)
インポートできたら、Standard Assets > Vehicles > Car > Prefabs から Car(プレハブ)をD&Dでシーンに追加します。
次に、SteamVRをインポートして、SteamVR > Prehabs> Camera rig を Car の下に置きます。
また、今回はVRTKを使わないので、以下の設定をします。

まず、Player Settings を開きます。
f:id:sweetgohan:20181109192431p:plain
そして、Player Settings の XR Settings で、Virtual Reality Supported にチェックを入れて、Virtual Reality SDKs の+を押し Open VR を追加します。
f:id:sweetgohan:20181110040903p:plain
これで準備は完了です。

追記

ここで、SteamVR のフォルダが、Standard Assets > Vehicles > Car > Prefabs の階層にある必要があります。(アセットをインポートした時に自動で移動していることもありますが・・・)
よくわからないですが、移動していないと下でスクリプトを書いた時にエラーが出ます。

道を作る

車を走らせようにも道がないと困るので道を作ります。
とりあえずで良い場合は、Cube を引き伸ばしたものに Add Component > Rigidbody で Use Gravity のチェックを外し、Is Kinetic にチェックを入れたものを道にしておくと良いと思います。
私は、Terrain に芝生のテクスチャを貼ったものの上に、Asset Store からインポートした道路のアセットを並べました。

コントローラーで運転できるようにする

下記のスクリプトを、Camera rig の下にあるRight(又はLeft) Controller にアタッチします。
その後、インスペクタから、GameObject に Car をアタッチします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.Vehicles.Car;

public class Controller : MonoBehaviour {
    private CarController m_Car;
    public GameObject gameobject;
    private float h;
    private float v;

    void Start () {
        m_Car = gameobject.GetComponent<CarController>();
    }
	
    void Update () {
        var trackedObject = GetComponent<SteamVR_TrackedObject>();
        var device = SteamVR_Controller.Input((int)trackedObject.index);
        var position = device.GetAxis();

        h += position.x * 0.1f * Time.deltaTime;

        if (device.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad)){
            v += 0.1f * Time.deltaTime;
        }else if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger)){
            v -= 0.1f * Time.deltaTime;
        }else{
            v = 0f;
        }
        m_Car.Move(h, v, v, 0f);
    }
}

完成したもの

でもやはり、実際に操作してみると少し酔いますね・・・。

参考記事

VR 概要 - Unity マニュアル

framesynthesis.jp

gametukurikata.com

qiita.com

HTC Vive プログラミング サンプル集

HTC Vive プログラミング サンプル集