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

株式会社ZOOA(ゾーア)のzobです。[<a href="https://twitter.com/ZOB_By_Zooa_Inc">@twitter<a>]<a href="https://zob.zooa.co.jp/?utm_source=qiita&utm_medium=social">
<img src=https://qiita-image-store.s3.amazonaws.com/0/252896/fda6f773-e8f8-f220-04a0-85cdbef56201.jpeg "logo.png">
弊社はフリーランスや、個人事業主、給料UPを目指している方向けに高単価求人案件配信サイト(ZOB)も運営しておりますので是非ご覧ください!
</a>
[前回](https://qiita.com/zob_by_zooa_inc/items/cbe68726a158cb2166e5)に引き続き、iTweenを色々と試してみました。

<a href="https://www.assetstore.unity3d.com/#!/content/84?aid=1101lIAt"><img src="https://api.assetstore.unity3d.com/affiliate/embed/package/84/icon" alt="iTween" width="128" height="128" /></a>

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

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

#iTween.RotateTo

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

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

![image.gif](https://qiita-image-store.s3.amazonaws.com/0/252896/8bf9288f-61d6-2db5-9527-5da56d4e0935.gif)

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

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

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

```ruby:
iTween.RotateTo(gameObject, iTween.Hash("x", 180f, "y", 180f));
```

```ruby:
iTween.RotateTo(gameObject, iTween.Hash("x", 180f, "z", 180f));
```

```ruby:
iTween.RotateTo(gameObject, iTween.Hash("y", 180f, "z", 180f));
```

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

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

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

```ruby:
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以上を指定する必要がある。<br/>一回転させるには720fを指定する必要がある |
|-720f～-540f        |180度より先へ自然に回転させるためには-540f以下を指定する必要がある。<br/>一回転させるには-720fを指定する必要がある |
|720fより上        | (値/360-1)回転＋余り           |
|-720fより下        | (値/360+1)回転＋余り           |

#iTween.RotateFrom

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

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

![image.gif](https://qiita-image-store.s3.amazonaws.com/0/252896/853180fb-5208-e52b-d9a6-8f5e554d13c8.gif)

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

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

![image.gif](https://qiita-image-store.s3.amazonaws.com/0/252896/7f380028-ea57-f9dc-81ea-3ad51eee54c1.gif)

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

#iTween.RotateUpdate

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

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

![image.gif](https://qiita-image-store.s3.amazonaws.com/0/252896/6bc186c5-15e4-dc03-6312-0ebd1a7cfc15.gif)


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

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

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

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

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

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

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

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

#iTween.RotateBy

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

```ruby:
iTween.RotateBy(gameObject, iTween.Hash("x", 180f));
```
![image.gif](https://qiita-image-store.s3.amazonaws.com/0/252896/46b4fad1-5d0c-d58c-310c-b445c28e06c5.gif)

#iTween.RotateAdd

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

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

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

```ruby:
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](https://qiita-image-store.s3.amazonaws.com/0/252896/5774f9c5-f6d1-cb90-b03f-da1c62802c56.gif)

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

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

・技術検証協力　荻野雄季([Twitter](https://twitter.com/YuukiOgino), [Qiita](https://qiita.com/YuukiOgino))

---

**UnityのiTweenを試してみる** 
[その1 Move系](https://qiita.com/zob_by_zooa_inc/items/cbe68726a158cb2166e5)
その2 Rotate系←今ココ
[その3 Scale系](https://qiita.com/zob_by_zooa_inc/items/0632b292515c67e80b22)
[その4 Shake系](https://qiita.com/zob_by_zooa_inc/items/4cfb30d6cd12ec616918)
[その5 Punch系](https://qiita.com/zob_by_zooa_inc/items/c6723e5124955ba0224a)


---

株式会社ZOOA(ゾーア)
弊社はフリーランスや、個人事業主に特化したSES案件共有サイト(<a href="https://zob.zooa.co.jp/?utm_source=qiita&utm_medium=social">ZOB</a>)も運営しておりますので給料UPを目指してる方は是非ご覧ください!

<div style="vertical-align:middle;">
<a href="https://zob.zooa.co.jp/?utm_source=qiita&utm_medium=social">
<img src=https://qiita-image-store.s3.amazonaws.com/0/252896/387a8320-3b5c-add3-d0e6-7c3e9933b504.png "logo.png">
</a>
</div>


---