ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Unity】オブジェクトの移動方法(絶対座標・相対座標)

 OculusGoでアプリが作りたくてUnityを勉強中です。

 今回はオブジェクトの移動方法の備忘録です。用途としては「OculusGo用のカメラをコントローラーなどで移動させる」際に使うことになると思います。


1:絶対座標での移動方法
 Unityのオブジェクトには「Transform」という項目があります。この「Position」の座標が絶対座標(どこから見てもその座標)になります。
f:id:rikoubou:20180612173857p:plain

 この値を変更することでオブジェクトを移動させることができます。

 以下のようなスクリプトを記述することにより、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のアプリを色々作っていきたいです。


・参考資料