LoginSignup
1
4

More than 5 years have passed since last update.

Unity/C#~ VRアプリで、ゲームオブジェクトを操作する(コードメモ)

Posted at

Unityで作るVRアプリで、Rayを飛ばすことで衝突判定を行い、様々なアクションを可能にすることができます。

【事前準備】
https://www.durovis.com/en/sdk.html から「Dive Unity Plugin Package」をダウンロード。

・Hierarchyビューの"MainCamera"を削除しにステージ上にダウンロードしたパッケージの中から"DiveCamera"を配置。

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

GyroScript.cs
using UnityEngine;
using System.Collections;

public class GyroScript : MonoBehaviour {

    Quaternion currentGyro;

    void Start(){
        Input.gyro.enabled = true;
    }

    void Update () {
        currentGyro = Input.gyro.attitude;
        this.transform.localRotation = 
            Quaternion.Euler(90, 90, 0) * ( new Quaternion (-currentGyro.x, -currentGyro.y, currentGyro.z, currentGyro.w)); 
    }
}

これを、配置したDiveCameraにアタッチします。

次に、「Edit」->「Projects Setting」->「Editor」からDeviceを接続している携帯端末にしてください。

これにより、端末の動きを感知しVR空間を自由に見回すことが可能になります。

【補足】
以前、GyroScriptをさらに編集してVR空間を動き回れるコードを実装しているので、よかったら参考にしてください。

Unity/C#~DiveCameraを使用しVR空間内で動く(コードメモ)
http://qiita.com/wtb114/items/5e390e850d43a6f3a1fe

2.カメラの視線によってゲームオブジェクトの衝突判定を行うため、RayControlerを配置。

DiveCameraからRayという光線のようなものを出しColliderを持つゲームオブジェクトに当てることで、衝突判定が可能になります。

1.まず、Hierarchyビューの「Create」をクリック後、「Create Empty」をクリックしてからのゲームオブジェクトを配置します。
名前を"RayController"に変更してください。

2.ステージ上に、Cubeなどを適当に配置、そしてその直下にQuadを配置してください。
TransformはDiveCameraから見える位置に調節してください。

3.後で衝突判定を行うため、2.で配置しているゲームオブジェクトのColliderのTagを設定しておきます。
「Edit」->「Project Settings」->「Tags and Layers」から、「Tag」の入力欄に"DifficultyCollider"を追加してください。そして、ゲームオブジェクト直下に配置したQuadにinspectorビューから、「Tag」を"DifficultyCollider"に設定してください。

3.RayControllerスクリプト作成。

RayController.cs
using UnityEngine;
using System.Collections;

public class RayController : MonoBehaviour {

    public GameObject  diveCamera;

    void Start () {
    }

    void Update () {
        Ray ray = new Ray (diveCamera.transform.position, diveCamera.transform.forward);
        RaycastHit hit;



        if (Physics.Raycast (ray, out hit)) {
            Debug.DrawLine (ray.origin, hit.point, Color.black);

            if (hit.collider.gameObject.tag == "DifficultyCollider") {
                 print("hit");
                                }
        }
    }
}

このスクリプトを、HierarchyビューのRayControllerにアタッチします。
最後に、HierarchyビューにあるRayControllerオブジェクトを選択後、RayControllerスクリプ トの欄の「Dive Camera」の部分に、Hierarchyビューにある「Dive_Camera」をドラッグ&ドロップしましょう。

ゲームを起動すると、DiveCameraから黒い線が出ているともいます。
端末を動かして、配置したゲームオブジェクトに黒い線を当ててみましょう。
コンソールに"hit"と出力されていれば、無事衝突判定ができています。

以上で、Rayの基本的な実装になります。

これを応用して、UIの操作などVRでのアクションを今後紹介していきたいと思います。

1
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
1
4