Unity2018標準のボーンアニメーションでいらすとやを動かす


Unity2019.3にて 2D Animationの preview が外れたようなので、[新しく記事を書きました](https://qiita.com/naninunenoy/items/854f20fd30061faa33c3)。

## はじめに
自作ゲームやプロトタイプでちょっとしたゲームを作りたいとき、絵を描くスキルはないので素材はWebから探す、というのはよくあることだと思います。しかし、Web上の素材は一枚絵であることがほとんどで、ゲームに使うにはアニメーションが欲しいこともあるでしょう。

Unity2018.1以降のバージョンでは2D画像にボーンを設定してアニメーションを当て込む機能が利用可能になりました。2018.10.21現在プレビュー版ですが、Unity公式の標準機能として無料で使えます。

本記事では`2D Animation`の機能で一枚絵にボーンを当て込み、実際に動かしてみるまでを説明します。
いらすとやから素材をお借りし、以下のアニメーションを作ってみました。
(一応スクワットのつもりです)

![movie.gif](https://qiita-image-store.s3.amazonaws.com/0/274974/a8d4c959-b2be-edd7-54bd-a402cc5bdeed.gif)



## ボーンアニメーション
3Dモデル(特にヒューマノイド型の)には実際の人間の骨に相当するボーンが設定されており、各ボーンを操作することで3Dモデルに任意のポーズを取らせることが可能になっています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/274974/d92563ff-be64-18d9-70d6-025f33ffe9b1.png)

`2D Animation`では2D画像にも同様にボーンを設定し、任意のポーズを取らせることができます。
従来は[Spine](http://ja.esotericsoftware.com)などのツールや[Anima2D](https://assetstore.unity.com/packages/essentials/unity-anima2d-79840?aid=1011lGbg&utm_source=aff)などのPluginでこの機能を実現していました。

## 導入
Unity2018.2に`2D Animation`を導入する手順を説明します(筆者の環境はMacです)。
1. [Window] > [Package Manager]からPackageManagerを開きます
2. [All]のトグルに切り替えると上の方に`2D Animation`が見つかるはずなので選択します。見つからない場合は[Advanced]からShow preview packagesをonにしてみて下さい。
3. [Install]を押すと自動でimportまでされます
4. 同様に`2D IK`もimportします

## 画像の用意
動かしたい画像を用意します。
説明ではこの画像を使っています。[両手を広げる警察官のイラスト](https://www.irasutoya.com/2018/06/blog-post_187.html)
いらすとやの素材はかなり自由に使えますし、背景が透過のpngなので条件に適しています。
その中でもいわゆるTポーズのように手足を広げてるものを選びました。

## ボーンの設定
1. Unityプロジェクト内に`Textures`のようなディレクトリを作成し、そこにエクスプローラやFinderから画像をDrag&Dropします
2. UnityEditorで画像を選択し、inspectorから[Sprite Editor]のボタンを押します
3. 開いたウィンドウの左上の[Sprite Editor]をクリックし、[Bone Editor]に切り替えます。
4. 右下のToolsパレットから一番左の[Create Bone]を選択し、腰あたり左クリックでにボーンを追加します。
5. 順番に胸、首、手足のボーンを追加して行きます。両肩・両腿のボーンは[Create Free Bone]から追加しました。
 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/274974/f72f9b26-81f0-0b88-4a94-86d8d28e8d51.png)

6. [Bone Editor]から[Skin Weight and Geometry Editor]に切り替えます。ウィンドウが出たら[Apply]を選択してください。
7. [Geometry]が選択された状態で[Generate]をクリックし3つのパラメータを設定して[Generate]のボタンを押します。画像のどの部分が使いたい部分(警察官の絵)かの境界を3つのパラメータから設定できます。[詳細](https://github.com/Unity-Technologies/2d-animation-samples/blob/master/Documentation/2DAnimation.md)
![image-1.png](https://qiita-image-store.s3.amazonaws.com/0/274974/4bf70112-85f1-2cf8-136d-54ae9e57d992.png)

8. [Geometry]に切り替えて[Auto]をクリックします。画像のどの部分にどのボーンが影響するかを設定できます。
![image-2.png](https://qiita-image-store.s3.amazonaws.com/0/274974/6936d59c-1da6-554b-c915-eacfbd78bd20.png)

9. Sprite Editorのウィンドウを閉じます。ウィンドウが出たら[Apply]を選択してください。
10. シーンのHierarchyウィンドウで右クリックをして[Create Empty]から新規オブジェクトを追加します
11. 追加した空オブジェクトに対して9.までで編集した画像ファイルをDrag&Dropします。
12. Drag&Dropして追加されたSpriteのオブジェクトを選択し、inspectorから[Add Component]を押し、`Sprite Skin`を追加します。
13. inspectorの`Sprite Skin`の項目から[Create Bones]をクリックすると事前に設定したボーンに対応するオブジェクトが自動で作成されます。また、5.でボーンに名前を設定しているとそれも反映されます。
14. 以上の工程で任意の画像にボーンを設定することができました。シーン上のボーンをマウスなどで動かせば絵もそれに合わせて動きます。

## IKの設定
上記で作成した画像に任意のポーズを取らせようとすると、肩から手先まで全ての関節角度を設定せねばならず、面倒です。
そこでUnityには`2D IK`という機能も用意されており、これにより手先の位置を決定するだけで肘と肩の関節角度を自動で決定してくれます。IKとはInverse Kinematics(逆運動学)の略です。
以下で画像の手先にIKを設定する手順を述べます。

1. 先の手順10.で追加したオブジェクトを選択し、[Create Empty]から新規オブジェクトを作成します。(`IK`のような名前をつけておくと良いでしょう)
2. 作成したオブジェクトを選択し、inspectorから[Add Component]を押し、`IK Manager 2D`を追加します。
3. `IK Manager 2D`の`IK Solovers`のリストの[+]をクリックし、Limbを選択します。
4. すると子オブジェクトに`New LimbSolver 2D`というオブジェクトができます。右手に設定しようと思いますので、`RightHandSolver`などに改名します。
5. `Limb Solver 2D`の`Target`の`None`となっている欄に先の手順で作成した右手先のボーンをDrag&Dropします。
6. [Crate Effector]ボタンが押せるようになるので、押します。
7. `New RightHandSolver_Effector`という子オブジェクトが作成されます。このオブジェクトをマウスなどで動かすと、右手先の位置に合わせて右腕全体が動くようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/274974/59d00978-766c-0526-0787-ead142da914b.png)

手先の位置に対する肘の位置が気に入らなければ、`Limb Solver 2D`の`Flip`プロパティから切り替え可能です。
IKを設定することで、Effectorを動かすだけで画像の動きを簡単に設定できるようになったと思います。

## おわりに
Web上の素材から欲しいアニメーションを自分で作れるというのは中々に画期的ではないでしょうか。
ゲーム開発を志す方達の助けになれば幸いです。
![ezgif-1-fd23b13afab3.gif](https://qiita-image-store.s3.amazonaws.com/0/274974/6e897fd4-6863-3fe4-6c96-7023a24be948.gif)

## 参考
Unity-Technologies/2d-animation-samples: https://github.com/Unity-Technologies/2d-animation-samples
Anima2Dでキャラクターアニメーションを作ろう！編: http://techblog.sega.jp/entry/2018/03/26/100000