Unityで地面の上のキューブを転がす方法【Rotate Around編】

2017.06.04 自習室 1
Unityで地面の上のキューブを転がす方法【Rotate Around編】

先日開催されていたunity1week(テーマ:転がる)でキューブを回転させているゲームが多くありました。

↓ こういうのとか ↓ こういうの

一見、簡単そうに思えたのですが、よくよく考えるとどうやって回転させているのか分からなかったので試してみました。
ひとまず思い通りに回転させることはできたので、記事にして残しておきます。

↓ 動かしてみたところ 回転するキューブ

環境

  • Unity 5.6.0f3

使用した関数

今回、回転にはtransform.RotateAroundを使いました。「回転の中心」「回転軸」「回転角度」を与えてあげると移動しながら回転してくれます。便利。

transform.RotateAround
public void RotateAround(Vector3 point, Vector3 axis, float angle);
pointを中心に、axisで指定した回転軸に沿って、angle度回転してくれる
公式スクリプトリファレンス

一方向だけ動かす

とりあえず一方向だけ回転させることを考えます。
必要な情報は「回転の中心」「回転軸」「回転角度」ですが、以下の図のような感じでうまくいきそうな気がします。

回転の概要

上の図に従って、右に転がす場合の「回転の中心」「回転軸」「回転角度」を設定してみます。

回転の中心を取得する

回転の中心は「回転したい方向の下辺の中心」です。
transform.positionでcubeの中心位置がわかるので、x軸方向にcubeのサイズの半分を足し、y軸方向にcubeのサイズの半分を引けば「回転したい方向の下辺の中心」になりそうです。

オブジェクトの大きさはtransform.localScaleで取得できるので、これを使ってオブジェクトの大きさの半分を求め、適当な変数に入れておきます。

回転軸を取得する

右回転する時の回転軸は要はz軸と同一ですが、ベクトルの向きには注意が必要です。
unityで回転させる時、プラスの値を与えると回転の向きは向かって左回転(反時計回り)になります。
なので右回転させたい場合、回転軸の向きを手前側に向けるか、マイナス方向に回転させる必要があります。
どちらの方法でもいいのですが、ここでは回転軸の向きを手前側に向け、角度を常に正の値で与えることにします。

回転軸の説明

回転角度

最終的に90度回転してほしいので、ここでは単純に90度を与えます。

回転させてみる

ここまでの内容をまとめて、右矢印が押されたら右側に回転させるスクリプトを動かしてみます。

回転テスト

なめらかに回転させる

いちおう動くには動きましたが、まったく回転している感じがしないので修正していきます。
一気に回転してしまっているのはangleにいきなり90度を与えてしまっているからなので、徐々に回転させて最終的に90度回転するように変更します。

Update内で徐々に回転させる処理をするとややこしいので、可変であるangle周りの処理をコルーチンにして処理を外に出します。
また、回転中に入力を受け付けないようにisRotateフラグを用意して入力受付を制限します。

角度の与え方はいろいろあると思いますが、ここでは単純に値を加算していって、合計が90度に達したら回転を止めることにします。

なめらか回転1方向

全ての方向に動かす

1方向できているので、あとは同じように他の方向も動かせるようにします。

完成!

回転するキューブ

関連記事

Cubeを接地した状態で回転させる方法について 2017.6.4 UnityスクリプトでCubeをころころ転がす 2016.12.03 [Unity] 直方体を転がすスクリプト 2016.09.13

1 thought on “Unityで地面の上のキューブを転がす方法【Rotate Around編】”

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です