Barを移動するときのAnimationを作成してUnityChanに適用する


[前回](http://qiita.com/mokemokechicken/items/77d05dd81ed418ccfb52) からの続きです。

今回は、Bar(横に伸びてる棒)を掴んで移動している時のAnimationを作ってみることにします。

Animatorの設定
=======

アニメーションの種類として、「何もしていない」「走っている」「はしご」「バー」「落下」があるとします。
※実際は「動いているか・動いていないか」というのがありそうですが、今は考えないでおきます。

というわけで、以下の様なStateとフラグを作っておきます。

![demo1_unity_-_RoadRunner_-_Web_Player.png](https://qiita-image-store.s3.amazonaws.com/0/11124/b3076f3d-62bd-b6a9-ac89-2aeae961fcb6.png "demo1_unity_-_RoadRunner_-_Web_Player.png")

それぞれのTransitionは、フラグの条件の組み合わせで定義するとします。
まだいろいろ調整中なのでどう定義するかは割愛しますが、およそ予想がつくのではないでしょうか。


Animationの作成
=====

作成と編集までの準備
--------------------
Project -> Assets の部分を右クリックして、Create -> Animation を選びます。
名前を `BarAnimation` とでもしておきます。

次にUnityChanにAttachされている Animatorの `OnBar` Stateの Motion の部分に今作成した BarAnimation をD&Dなどで登録します。

![demo1_unity_-_RoadRunner_-_Web_Player.png](https://qiita-image-store.s3.amazonaws.com/0/11124/a0859871-6ea5-35a1-0bc4-bfc8682ce85b.png "demo1_unity_-_RoadRunner_-_Web_Player.png")

次に、メニューから Window -> Animation を選択して、 Animation編集Windowを表示します。
そこで、図の部分から「BarAnimation」を選択しておきます。こうすると編集できるようになります。

![demo1_unity_-_RoadRunner_-_Web_Player.png](https://qiita-image-store.s3.amazonaws.com/0/11124/a49acaa2-0a60-43c4-5ea5-5f63bf6d9fe0.png "demo1_unity_-_RoadRunner_-_Web_Player.png")

Sceneタブを選択して、UnityChanを選んでみます。
そこで更に、Animation Windowに戻って、再生ボタンを押すと何か妙なポーズになります。

![demo1_unity_-_RoadRunner_-_Web_Player.png](https://qiita-image-store.s3.amazonaws.com/0/11124/659feb6f-6cf3-8777-deb2-fb67a4a34b57.png "demo1_unity_-_RoadRunner_-_Web_Player.png")

これが、`BarAnimation` による現状の動作になります。
あとは、これが思うような動作になるように Animation編集Windowで作業をしていきます。

どうやってAnimationさせるか
-----------

[BlockのAnimationを作った時](http://qiita.com/mokemokechicken/items/f0ee1ee7bcf8dca19ed0) と同様に必要なパーツの角度や位置を時間軸に沿って定義していくわけです。

問題はどの値を操作すると良いか、ということです。
適当に試してみていると、Add Curveのメニューに`Animator`というのがあります。

![UnityEditorInternal_AddCurvesPopup.png](https://qiita-image-store.s3.amazonaws.com/0/11124/7fc259ee-3bd9-59da-687f-1400ff954368.png "UnityEditorInternal_AddCurvesPopup.png")

どうやら、これの値を操作するとよしなにその部位が動いてくれるようです。
また、対象とした部位だけでなく、他の部位もある程度連動して動くようなので、比較的自然な動作が作れるのかもしれません（私には無理ですが…）。
例えば、「肩を上げる→体が傾く」というような感じに見えました。

（余談）より低レベルなAnimationのさせ方?
-----

この他にも、もっと低レベル?な値を操作してAnimationさせることもできます。
以下の部位のRotationをいじると、もっと自由度の高い（だが面倒くさい）Animationが可能になるのではないでしょうか。

### 肩〜手

下図のように、左側ならば

* LeftShoulder: 肩の根本
* LeftArm: これも肩の辺り
* LeftForeArm: 肘
* LeftHand: 手首

という構成になっています。

![demo1_unity_-_RoadRunner_-_Web_Player.png](https://qiita-image-store.s3.amazonaws.com/0/11124/aea634c1-8d13-819e-1151-bf27fc79b16c.png "demo1_unity_-_RoadRunner_-_Web_Player.png")

### 腿〜足首

下図のように、左側ならば

* LeftUpLeg: 腿
* LeftLeg: 膝
* LeftFoot: 足首

という構成になっています。

![demo1_unity_-_RoadRunner_-_Web_Player.png](https://qiita-image-store.s3.amazonaws.com/0/11124/1ab49673-1198-0e12-5294-567bc37086e3.png "demo1_unity_-_RoadRunner_-_Web_Player.png")


Animationの作成
--------

はっきりいって行き当たりばったりで作っていますので、どうやると良いかなどは上手く説明できません。
気合いで納得がいく動きになるまで調整します。

今回、腕の辺りは以下のパラメータをいじっています。

* Arm Down-Up
* Forearm Stretch
* Forearm Twist In-Out
* Shoulder Down-Up

あと、何故か、体が下の方にずれてしまうので、
強引に `Character1_Reference#Position.y` で位置を上にずらしています。

とりあえず作ってみましたが、クソゲー感がより増した感じです。
首とか体とか足とかも少しいじればいいんでしょうが、、、まあ、これはこれで趣があって良いですねｗ

おわりに
======

現状付けなくても良いレベルのAnimationですが、頑張ればマシになる道筋を付けることはできた感じでしょうか。

* 今回のバージョンのWebPlayer版
	* https://dl.dropboxusercontent.com/u/21300511/UnityRoadRunner/demo1f/demo1f.html
* ソースコード
	* https://github.com/mokemokechicken/UnityChanRoadRunner/tree/demo1f