【Unity】2Dゲームを作る際のアニメーション方法

この記事は「[HTC Advent Calendar 2020](https://qiita.com/advent-calendar/2020/htc)」の11日目の記事です。
今回は、Unityで2Dゲームを作る際にに使用するアニメーション方法について書いていきます。

# 使用素材
今回は自作のドット絵をサンプル画像として使用します。
![hiyoko1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917920/d265771e-f2cc-808f-c900-d46687f87082.png)

5分ぐらいで適当に作ってみたドット絵です。一応ひよこのつもりです。
ブサイクですが、なんとなく愛嬌のある...気がします。

飛んでいるようなアニメーションにしたかったので、翼を広げているようなドット絵も一緒に作っています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917920/cc1df627-0452-eab6-9b36-fa2de732bcb3.png">　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917920/a5964d41-e2cb-006a-0888-263b1f03585a.png">


# 2Dキャラクターの作成

まずは作成した画像をUnityにインポートします。背景は適当にイラスト屋から拝借してきています。
画像では、Assets配下にSpritesというフォルダを作り、インポートしています。
画像のインポートが完了したら、画像を１つHierarchyビューに配置します。

![ss 2020-12-11 21.31.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917920/c60ef6a9-ed57-9fda-e73f-3e7bdd1282e9.png)

アニメーションをつける準備をしていきます。
アニメーションに関してはキーフレーム、アニメーションクリップ、メカニムの要素を用います。これらを利用するために、先ほど、Hierarchyビューに配置したオブジェクトに、Animatorコンポーネントを追加します。

AnimatorコンポーネントはUnity上部のComponentタブのMiscellaneousのAnimatorから追加することができます。

![ss 2020-12-11 21.33.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917920/773a4307-eb66-7fc4-eccf-2c506b7ea945.png)

Animatorコンポーネントを制御するアニメーターコントローラーをアセットとして作成します。
ProjectビューのCreateメニューからAnimator Controllerを選択することで作成できます。Animator Controller作成後はシーン上のオブジェクトのControllerプロパティに設定を行います。

![ss 2020-12-11 21.36.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917920/4dfe5eb6-6341-55bb-8062-4431cea353fb.png)


# スプライトアニメーションの作成

アニメーションクリップを使用して、羽ばたいている動きを表現します。
アニメーションクリップの作成は、Animationウィンドウで行うため、Hierarchyビューのオブジェクトを選択した状態で、WindowメニューからAnimationウィンドウを開きます。
Animationウィンドウが開いたら、Animationウィンドウ右側にある、Createボタンをクリックすることで、以下の画像のように、クリップの作成とキーフレームの設定が可能になります。

![ss 2020-12-11 21.42.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917920/039516bd-8cfd-0d21-b258-b478d12d29f3.png)

最初に作成した画像をドラック＆ドロップで追加し、等間隔で並べていきます。
羽ばたいているときのアニメーションを作成したので、新しくアニメーションクリップを作成し、静止しているときのアニメーションを追加します。
この場合は、１つのスプライト追加するだけで「動かない」を表現するアニメーションクリップを作成することができます。

![ss 2020-12-11 21.49.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917920/bb4da29a-5a33-6147-2d83-ac84e0e8168c.png)

# メカニムの設定

キャラクターのアニメーションが揃ったので、２つのアニメーション間の状態遷移をメカニムを使って設定していきます。メカニムの作業はAnimatorウィンドウで行います。
先ほど作成したアニメーションクリップのステートは反映されているので、Animatorウィンドウで確認することができます。
まずは、状態遷移の判断基準となるようなパラメータの定義を行います。ここではflapという名前のパラメータでbool値を設定します。

![ss 2020-12-11 22.42.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917920/d7a76b22-b90b-671d-613c-6263bef13ee6.png)

次にトランジションの設定も行います。先ほど設定したflapパラメータがtrueならflapアニメーションに遷移し、flaseならばidleモーションに遷移するように設定します。
flapステートを右クリックし、Make Transitionを選択し、矢印が出てくるので、それをidleステートに繋ぎます。これで、２つの状態間でトランジションできるようになります。
その後は、繋げたトランジションを選択肢、Inspectorビューで詳細な設定を行います。InspectorビューのConditionでflapパラメータを指定し、値をfalseに設定します。
同様にidleステートからflapステートにトランジション設定を行い、トランジションのConditionsにはtureを設定します。

![ss 2020-12-11 22.44.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917920/2a6708fb-b1ef-f71d-3495-ffeee6d5b384.png)

flapの値でアニメーションを変更できるので、ゲーム内で他のオブジェクトにぶつかったりした際に飛ぶのを止めるなどの処理を行うことができるようになります。

![ss 2020-12-11 23.07.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917920/5a2bce0a-d593-f646-7051-cb6dfe733146.png)

今回、初めてUnityでアニメーションを使ってみましたが、コードを書かずに簡単にアニメーションが実現できるのはすばらしいですね。