OculusGoでアプリが作りたくてUnityを勉強中です。
今回はオブジェクトの移動方法の備忘録です。用途としては「OculusGo用のカメラをコントローラーなどで移動させる」際に使うことになると思います。
1:絶対座標での移動方法
Unityのオブジェクトには「Transform」という項目があります。この「Position」の座標が絶対座標(どこから見てもその座標)になります。
この値を変更することでオブジェクトを移動させることができます。
以下のようなスクリプトを記述することにより、Positionの値を変更することができます。
/* 例えばOculus Goのカメラである「OVRCameraRig」の場合 */ // 「OVRCameraRig」という名前のオブジェクトのTransformを取得 Transform cameraTrans = GameObject.Find("OVRCameraRig").transform; // positionを取得して各座標を+1する Vector3 pos = cameraTrans.position; pos.x = pos.x + 1f; pos.y = pos.y + 1f; pos.z = pos.z + 1f; // 新しい座標をセットする cameraTrans.position = pos;
これで絶対的な座標での移動ができます。
しかしFPSなどでは「カメラが向いている方向に動きたい場合」があります。その場合、この方法では絶対座標通りにしか動けないので、次に紹介する相対座標での移動方法を採用することになります。
2:相対座標での移動方法
オブジェクトにおけるZ軸のプラス方向が正面として、前、後への移動などを設定する便利なVector3の値が用意されています。
その一覧が以下の通りで「それぞれ値が+1」されます。
方向 | 値 |
---|---|
前方向 | Vector3.forward |
後方向 | Vector3.back |
左方向 | Vector3.left |
右方向 | Vector3.right |
上方向 | Vector3.up |
下方向 | Vector3.down |
使い方の例は以下の通りです。
GameObject.Find("GameObject").transform.Translate(Vector3.forward);
そのオブジェクトから見て前方向に0.5だけ移動させたい場合は、以下のようなスクリプトで実現できます。
/* 例えばOculus Goのカメラである「OVRCameraRig」の場合 */ // 「OVRCameraRig」という名前のオブジェクトのTransformを取得 Transform cameraTrans = GameObject.Find("OVRCameraRig").transform; // そのオブジェクトから見て前方向に0.5だけ移動 cameraTrans.Translate( Vector3.forward * 0.5f);
FPSのような視点を左右に回転させたりする場合は、絶対座標での移動ではなく相対的な移動であるこちらを使用した方が楽だと思います。
以上がオブジェクトの2通りの移動方法です。Unityを使っている人には基本的なことだとは思いますが、操作性のあるゲームなどを作る場合は必要になるので記事にした次第です。
とりあえずこれでUnityでのオブジェクトの動かし方はわかったので、OculusGoのアプリを色々作っていきたいです。
・参考資料