Unityで作るVRアプリで、Rayを飛ばすことで衝突判定を行い、様々なアクションを可能にすることができます。
【事前準備】
・https://www.durovis.com/en/sdk.html から「Dive Unity Plugin Package」をダウンロード。
・Hierarchyビューの"MainCamera"を削除しにステージ上にダウンロードしたパッケージの中から"DiveCamera"を配置。
1.デバイス上で、Gyroセンサーを感知、またDiveCamera自身を動かすためのScriptを用意。
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スクリプト作成。
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でのアクションを今後紹介していきたいと思います。