Unityでスクリプトを使って、別のオブジェクトの周りを周回する

Unityでスクリプトを使って対象の周りを回転する

前提条件

  • 自オブジェクトは親オブジェクトの周りを等間隔で周回する。
  • 上下キーで自オブジェクトの上下(Y軸方向)に移動する。
  • 左右キーで自オブジェクトの上下(X軸方向)に移動する。

移動後の自オブジェクトの座標ベクトルの取得

ここでは、初期状態のY軸、Z軸をオブジェクトが保持している回転クォータニオンで回転します。

初期のZ軸(0,0,1),Y軸(0,1,0)をそれぞれ$I_z$,$I_y$、自オブジェクトの現在の回転クォータニオンを$q_r$、移動後のY,Z軸を$V_z$,$V,y$とすると、次のように計算できます。

$V_z = q_r \times I_z$
$V_y = q_r \times I_y$

回転のためのクォータニオンの作成

Y軸方向に回転するためには、Z軸を中心にして回転すればいいので、1度回転する場合は次のようになります。
$q_z = q(V_z, 1)$
同様に、X軸方向に回転するためには、Y軸を中心にして回転すればいいので、1度回転する場合は次のようになります。
$q_y = q(V_y, 1)$

自オブジェクトの回転後の回転クォータニオン$q_r’$の作成

$q_r’ = q * q_r$
ただし、$q$は、$q_z$または$q_z$のいずれかです。

回転後の位置の計算

次の手順で計算していきます。
1. 親オブジェクトの位置($v_p$)から自オブジェクトの位置($v_c$)に向かうベクトルを作成する。
$v = v_c – v_p$
2. 作成したベクトルを回転のためのクォータニオンで回転する。これは、原点でのベクトルの回転になります。
$v’ = q * v$
3. 親オブジェクトからの相対的な位置に移動する。
$v’ = v’ + v_p$

実際のスクリプト

Digiprove sealCopyright secured by Digiprove © 2015

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください