【Unity】Animatorの個人的な逆引きリファレンス

# はじめに
Animatorに慣れていない頃の自分がアニメーションを触っていて、つまづいた点などを軽くまとめてみました。

# 【Animation】 ループを設定する方法
Animation ClipのInspector上からアニメーションの**ループ**の有無を設定することができます。
知らないと結構ハマるかも

![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/245fc96a-0bfe-7234-9bdd-38cfeae87b7c.png)


# 【Animator】○○秒待ってからステートを再生する方法

<img height = 200 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/aea007ae-2059-baac-dfa1-1ceadc2095f9.png">

Animatorに慣れてない頃、長さ○○秒のAnimationClipを使ってステート再生を待機させるというまわりくどい方法をとっていました。

ここでは**空のステート**を使ってステート再生を数秒間待機させる方法についてまとめたいと思います。

## STEP1. 空のステートを用意
まず、AnimatorControllerの中にAnimiationClipが付いていない空のステートを作成し、以下のようにつなぎます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/80a18c3b-c345-82c1-5123-56e1df7554e6.png)

ステート名は **New State**としておきます.

## STEP2.　数秒間待機させてからAnimation Clipが再生されるようにしてみる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/abbb7651-3dd7-d4ae-ee42-e7884442400a.png)

New State と New Animationをつなぐ矢印を選択した状態で、以下のように設定します。
>**Exit Time**(遷移前のステートが終了するまでの時間) = **2**
>**Transition Duration**(遷移にかかる時間) = **0**
>**Has Exit Time** のチェックは入れる

上記のように設定することで、New Stateが2秒間再生された後にNew Animation が再生されるようになります。 
![animation_1.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/0e85573c-5ca2-5d72-ab26-6d9b01dddec7.gif)


#【Animator】ステートの遷移先が2つ以上設定されていた場合の挙動について
ステートの遷移先が2つ以上設定されていた場合、条件を先に満たしたものが優先して遷移が行われます。

例えば、片方の遷移は**Exit Time = 1**、もう片方の遷移は**Exit Time = 2**といった感じで設定されていた場合、**Exit Time = 1**の遷移が優先されます。


## 検証してみる
### 準備
以下のようにHas Exit Timeを設定しました。

Exit Time = 1の遷移
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/65ec06a0-4552-7674-933b-071106558ca5.png)

Exit Time = 2の遷移
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/8f6ce1d7-251d-aab0-9fa1-d95f4db41f21.png)

### 実行
![animation_5.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/9f459d67-986d-88b1-5b88-f370e1666d7a.gif)

**Exit Time = 1**の方へ遷移していることが確認できました。


#【Animator】パラメーターを使ってステート遷移を制御する
ここではステート間の遷移をパラメーターを使って制御する方法をまとめてみます。

今回はboolパラメータがtrueになるまで遷移を止めてみます。

## STEP0. boolパラメータの作成
Animatorウィンドウの左側の**Parameter**タブからboolパラメータを追加しておきます。

![animation_2.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/f7ff9139-8f26-5282-35b6-7e4556ffbab4.gif)

## STEP1. 条件の追加
New State と　New Animation間の遷移の**Has Exit Time**のチェックを外し、**Condition**へ条件を追加します。

![animation_3.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/ece4684d-d73c-2586-4d93-d279d0aeb7b5.gif)

ここでは パラメーター**New Bool = true**という条件を追加しています。
こうすることで**"New Bool" が "true" の場合に限り遷移を許可する**、というふるまいを定義することができます

## STEP2. 挙動の確認
New Bool を trueにするとステートが New State から　New Animationへ遷移することが確認できます。
![animation_4.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/ff7af77a-c9b3-cde8-35e9-14c8cf911a89.gif)

# 【Animator】レイヤーを使ってアニメーションを混ぜる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/08ff7de3-cbb9-a625-e475-4b11f6cd4460.png)

ここではAnimatorのレイヤーについてまとめてみます。

## アニメーションの準備
最初に、X軸回転アニメーションとY軸回転アニメーションを作成します

X軸回転アニメーション　(RotateX.anim)
![animation_6.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/578635c4-6798-8a5f-8967-1dcd0a1c41f7.gif)

Y軸回転アニメーション (RotateX.anim)
![animation_7.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/63732f9d-95b9-1353-7f81-ea3a75e6b597.gif)

## レイヤー作成
Animatorに二つのレイヤーを作成し、片方にX軸アニメーション、もう片方にY軸回転アニメーションを追加します。

![animation_8.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/f9bcbf2e-1a94-c0ef-6485-cdda98b1955d.gif)

レイヤー名はそれぞれRotationX, RotationY としておきます。

## レイヤーのWeight
X軸回転レイヤーのWeightが1、Y軸回転レイヤーのWeightが0の場合、X軸回転だけが適用されます。
![animation_9.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/bda75824-8ae2-67a4-0ec9-09777ec59df5.gif)

## Blending = Override の挙動
Y軸回転レイヤーのBlendingを**Override**にした状態でWeightを1に設定するとY軸回転を起こすようになります
![animation_10.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/a6575c6f-0a6f-37c2-efab-2bda3dc847a0.gif)
**Override**の場合だとアニメーションが**上書き**されます。

## Blending = Additive の挙動
Y軸回転レイヤーのBlendingを**Additive**にした状態でWeightを1に設定するとX軸回転とY軸回転が両方同時に行われるようになります。

![animation_11.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/03cdcd24-acd9-9acf-6173-fe9826599bad.gif)


**Additive**の場合だとアニメーションが**加算**されます。





# 【番外編】エディター拡張でAnimatorの中にAnimationClipを入れる
AnimationClipをAnimatorの中に入れると、アセットをきれいに整理することができるのでオススメです。

下記ページで具体的な方法が紹介されています。

**UnityのAnimatorControllerにAnimationClipを内蔵する - テラシュールブログ**
http://tsubakit1.hateblo.jp/entry/2015/02/03/232316