Unity3D
Unity
iTween

UnityのiTweenを試してみる その2 Rotate系

株式会社ZOOA(ゾーア)のzobです。[@twitter]

弊社はフリーランスや、個人事業主、給料UPを目指している方向けに高単価求人案件配信サイト(ZOB)も運営しておりますので是非ご覧ください!

前回に引き続き、iTweenを色々と試してみました。

iTween

今回はRotate系のメソッドを試してみました。

検証で使用したUnityバージョンは以下の通りです。
Unity2018.1.0f2

iTween.RotateTo

RotateToは指定した回転座標位置にオブジェクトを回転アニメーションさせます。
使い方は以下の通りです

iTween.RotateTo(gameObject, iTween.Hash("x", 180f));

image.gif

上記のGifはアニメーションの様子をわかりやすくするため、以下の通り5秒の時間指定があります。

iTween.RotateTo(gameObject, iTween.Hash("x", 180f, "time", 5f));

感覚的にはMoveToと同じように使えそうです!

iTween.RotateTo(gameObject, iTween.Hash("x", 180f, "y", 180f));
iTween.RotateTo(gameObject, iTween.Hash("x", 180f, "z", 180f));
iTween.RotateTo(gameObject, iTween.Hash("y", 180f, "z", 180f));

回転軸3つを指定することも可能です!

iTween.RotateTo(gameObject, iTween.Hash("x", 180f, "y", 180f, "z", 180f));

以下のように、Hashで同じ座標を2回以上指定すると動かない(エラーが出る)ので注意が必要です。

iTween.RotateTo(gameObject, iTween.Hash("z", 180f, "z", -90f));

RotateToで指定できる値について

大雑把にまとめた、RotateToで使用できる値は以下の通りです。

備考
0f~180f
-180f~0f
0f~360f 180f~360fは-180f~0fと同じ動作
-360f~0f -360f~-180fは0f~180fと同じ動作
360f~540f 0f~180fと同じ動作
-540f~-360f -180f~0fと同じ動作
540f~720f 180度より先へ自然に回転させるためには540f以上を指定する必要がある。
一回転させるには720fを指定する必要がある
-720f~-540f 180度より先へ自然に回転させるためには-540f以下を指定する必要がある。
一回転させるには-720fを指定する必要がある
720fより上 (値/360-1)回転+余り
-720fより下 (値/360+1)回転+余り

iTween.RotateFrom

RotateFromは指定した回転座標位置から、元の回転座標に回転アニメーションさせます。
使い方は以下の通りです。

iTween.RotateFrom(gameObject, iTween.Hash("x", 75f));

image.gif

ただRotateFromは、値が以下のように90fを超えると挙動がかなり怪しくなります。

iTween.RotateFrom(gameObject, iTween.Hash("x", 91f));

image.gif

予想とは違う回転をするかもしれないので、90f以下に抑えるのがいいかもしれません。

iTween.RotateUpdate

RotateUpdateはRotateToと同じ、指定した回転座標位置にオブジェクトを回転アニメーションさせます。
MoveUpdateと同じ、Updateで呼ばないと回転アニメーションされません。

iTweenTest.cs
public class iTweenTest: MonoBehaviour
{
    void Update()
    {
        iTween.RotateUpdate(gameObject, iTween.Hash("rotation", new Vector3(90f, 0f, 0f)));
    }

}

image.gif

RotateUpdateでは、Hashにrotation(Vecter3)を使用します。

iTween.RotateUpdate(gameObject, iTween.Hash("rotation", new Vector3(90f, 0f, 0f)));

以下のように、X、Y、Z指定では回転しないので注意が必要です。

iTween.RotateUpdate(gameObject, iTween.Hash("x", 180f, "y", 180f, "z", 180f));

また、RotateFromと同じように値が90fを超えると挙動がかなり怪しくなります。

iTween.RotateUpdate(gameObject, iTween.Hash("rotation", new Vector3(91f, 0f, 0f)));

RotateUpdateで90fを超える値が入る場合は注意が必要のようです。

RotateUpdateはMoveUpdateと同じように、マウス座標やタッチした座標に回転させる等、動的に座標が変わる時に使うと便利です。

iTween.RotateBy

RotateByは現在の回転軸の値から、指定した値を加算して回転アニメーションさせます。
各回転軸の角加速度を指定している、という感じでしょうか。

iTween.RotateBy(gameObject, iTween.Hash("x", 180f));

image.gif

iTween.RotateAdd

RotateAddはRotateByと同じく、現在の回転軸の値から、指定した値を加算して回転させます。

iTween.RotateAdd(gameObject, iTween.Hash("x", 180f));

Addが付いている通り、RotateAddは他の回転アニメーション実行中でも利用可能です。
わかりやすい例として、以下のスクリプトを試してみましょう。

iTween.RotateBy(gameObject, iTween.Hash("x", 1f, "time", 5f));
iTween.RotateAdd(gameObject, iTween.Hash("y", 90f, "z", 90f, "time", 2f, "delay", 0.5f));

image.gif

途中から回転方向が変わりました。
MoveAddと似たような使い方ができますね。

まとめ

Rotate系を色々と試してみました。たった一行で回転アニメーションができるのは素晴らしいですね。
次回もiTweenの検証結果を書いていきます!

・技術検証協力 荻野雄季(Twitter, Qiita)


UnityのiTweenを試してみる
その1 Move系
その2 Rotate系←今ココ
その3 Scale系
その4 Shake系
その5 Punch系


株式会社ZOOA(ゾーア)
弊社はフリーランスや、個人事業主に特化したSES案件共有サイト(ZOB)も運営しておりますので給料UPを目指してる方は是非ご覧ください!