開発入門 > Unity > HTC VIVE > HTC VIVEで一人称視点First Person Controllerを使う

HTC VIVEで一人称視点First Person Controllerを使う

HTC VIVE、ルームスケールで移動できて楽しいです。

ただ、コントローラーを使って一人称視点でゲームを作ろうとすると工夫が必要です。ルームスケール+一人称視点でのキャラクター操作は酔いやすいので注意が必要です。またUnityのStandard AssetのFirst Person Controllerはそのままではうまく動きません。

今回はHTC VIVEを用いて

  • X-Boxコントローラーおよびキーボードでの操作に対応
    VIVEのHMDで向いている先を中心にコントロール
  • VIVEコントローラーではトリガーを引くと視線の先に移動する

を実装します。(もっと適切な仕様もあるかも)

20160423_165716

1、まずはSteamVR Pluginをインポートします。(Unity5.4からVirtualReality SupportだけでVIVEの利用が可能になりましたがコントローラーが使えません。)

fpc1

2,UnityのStandard AssetのCharactersをインポートします。First Person Controllerが利用可能になります。

fpc2

3,インポートしたスタンダードアセットからRigidBodyFPSControllerをシーンに追加します。

fpc3

4,先ほど追加したRigidBodyFPSControllerの子オブジェクトとしてSteamVRの[CameraRig]をシーンに追加します。

fpc4

5,不要なカメラを削除します。シーンに初めからあるMainCameraとRigidBodyFPSController内のMainCameraを削除

インスペクタービューでRigidBodyFPSControllerのRigidbodyFirstPersonControllerスクリプトのCamに[CameraRig]内のカメラCamera(eye)を設定します。

 

fpc5

6,Unityのゲームビューでマウスによる誤動作防止のため、InspectorでRigidbodyFirstPersonControllerのMouseLookのSensitivityを0に設定しておきます。

fpc6

これで、XBOXコントローラーおよびキーボードを用いたFirst Person ControllerがVIVEで利用可能になりました。

 

7,では次にVIVEのコントローラーでも移動できるようにしましょう。今回は、トリガーを引くことで前方に移動するという機能を実装します。

(トラックパッドでの移動など誰か実装したら教えてください)

using UnityEngine;
using System.Collections;

public class vive_firstpersoncontroller : MonoBehaviour {


    SteamVR_TrackedObject trackedObj;
    public GameObject ViveCameraHead;
    public GameObject FPSController;
    public float speed = 3;

    void Awake()
    {
        trackedObj = GetComponent<SteamVR_TrackedObject>();
    }

    void Update()
    {
        var device = SteamVR_Controller.Input((int)trackedObj.index);

        //トリガーを浅く握る
        if (device.GetTouch(SteamVR_Controller.ButtonMask.Trigger))
        {
            //Debug.Log("GetTouch Trigger");
            float slowSpeedFactor = 0.5f;
            Vector3 moveDistance = ViveCameraHead.transform.TransformDirection(Vector3.forward);
            Vector3 moveDistance2 = new Vector3(moveDistance.x * Time.deltaTime * speed* slowSpeedFactor, 0, moveDistance.z * Time.deltaTime * speed* slowSpeedFactor);
            FPSController.transform.position += moveDistance2;
        }
        //トリガーを深く握る
        if (device.GetPress(SteamVR_Controller.ButtonMask.Trigger))
        {
            //Debug.Log("GetPress Trigger");
            Vector3 moveDistance = ViveCameraHead.transform.TransformDirection(Vector3.forward);
            Vector3 moveDistance2 = new Vector3(moveDistance.x * Time.deltaTime * speed, 0, moveDistance.z * Time.deltaTime * speed);
            FPSController.transform.position += moveDistance2;
        }


    }

}

上記コードをvive_firstpersoncontroller.csとして保存し、Controllerにアタッチします。

Inspectorビューで
・VIVE Camera HeadにCameraを
・FPS ControllerにRigidBodyFPSControllerを
を設定します。

ここで要注意なのが

Unity5.3系ではCamera(head)
Unity5.4系ではCamera(eye)
を設定してください。

(Unity5.4では実行時にCamera(head)が消えるという謎仕様)

fpc7

パッケージダウンロード

上記をまとめたパッケージを用意しました。SteamVRを手動でインポートした後にパッケージのインポートを行ってください。(Unityスタンダードアセットは再配布OKとのことで下記パッケージに含めています)

RigidBodyFPSController_VIVE_5.3.unitypackage

RigidBodyFPSController_VIVE_5.4.unitypackage

 

カテゴリー: HTC VIVE, Unity

HOME / Coporate Site

© Copyright 2018 STYLY..