LoginSignup
0
1

More than 5 years have passed since last update.

Unity/C#~DiveCameraを使用しVR空間内で動く(コードメモ)

Last updated at Posted at 2016-12-17

今回は、VR空間内を自由に歩き回ったり、飛び回ったりできるアプリを実装。

◆事前準備
1.https://www.durovis.com/en/sdk.html から「Dive Unity Plugin Package」をダウンロード。
2.MainCameraの代わりにステージ上にダウンロードしたパッケージの中からDiveCameraを配置

デバイス上で、Gyroセンサーを感知、またDiveCamera自身を動かすために以下のScriptを用意します。

GyroScriptWalk.cs
using UnityEngine;
using System.Collections;

public class GyroScriptWalk : MonoBehaviour {

    public GameObject diveCamera;
        // 移動速度を数パターン設定(後進は-で定義)
    public float moveSpeed  = 10.0f;
    public float moveSpeed2 = 30.0f;
    public float moveSpeed3 = -10.0f;
    public float moveAngleX = 10.0f;
    public float moveAngleXX = 20.0f;
    public float moveAngleXXX = 350.0f;
    public float moveAngleXXXX = 340.0f;


    float yOffset;

    Quaternion currentGyro;

    void Start(){
        Input.gyro.enabled = true;
        yOffset = gameObject.transform.position.y;
    }

    void Update () {
                                // Gyroセンサーを感知
        currentGyro = Input.gyro.attitude;
        this.transform.localRotation = 
            Quaternion.Euler (90, 90, 0) * (new Quaternion (-currentGyro.x, -currentGyro.y, currentGyro.z, currentGyro.w)); 

        // 1.カメラの傾きを取得
        float angle = diveCamera.transform.eulerAngles.x;   

        // 2.ある角度以内であれば前進させる
        if (moveAngleX < angle && angle < moveAngleXX) {
            moveForward ();
        } else if (moveAngleXX < angle && angle < 45.0f) {
            runForward ();
        } else if (moveAngleXXX > angle && angle > moveAngleXXXX) {
            moveBackward ();
        }
  }

                // 2.速度に合わせて移動(moveForward,runForward,moveBackward)を定義
    public void moveForward() {
        Vector3 direction = new Vector3 (diveCamera.transform.forward.x, 0, diveCamera.transform.forward.z).normalized * moveSpeed * Time.deltaTime;
        Quaternion rotation = Quaternion.Euler (new Vector3 (0, -diveCamera.transform.rotation.eulerAngles.y, 0));
        diveCamera.transform.Translate (rotation * direction);
        diveCamera.transform.position = new Vector3 (diveCamera.transform.position.x, yOffset, diveCamera.transform.position.z);
    }

                public void runForward() {
        Vector3 direction = new Vector3 (diveCamera.transform.forward.x, 0, diveCamera.transform.forward.z).normalized * moveSpeed2 * Time.deltaTime;
        Quaternion rotation = Quaternion.Euler (new Vector3 (0, -diveCamera.transform.rotation.eulerAngles.y, 0));
        diveCamera.transform.Translate (rotation * direction);
        diveCamera.transform.position = new Vector3 (diveCamera.transform.position.x, yOffset, diveCamera.transform.position.z);
    }

    public void moveBackward() {
        Vector3 direction = new Vector3 (diveCamera.transform.forward.x, 0, diveCamera.transform.forward.z).normalized * moveSpeed3 * Time.deltaTime;
        Quaternion rotation = Quaternion.Euler (new Vector3 (0, -diveCamera.transform.rotation.eulerAngles.y, 0));
        diveCamera.transform.Translate (rotation * direction);
        diveCamera.transform.position = new Vector3 (diveCamera.transform.position.x, yOffset, diveCamera.transform.position.z);
    }
}
0
1
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
0
1