テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】2D AnimationのキャラクターにIKをつけてアニメーションで動かすまで

f:id:tsubaki_t1:20181228201422g:plain

今日は前回の続きで、スケルタルアニメーションをやっていきます。今回やるのは独自のキャラクターを動かす方法についてです。

タナカさん登場

前回のキャラクターを動かそうと思いましたが自分が動かしても良い感じにならない(ハイクォリティなテクスチャーにはハイクォリティなアニメーションが必要)ので、自分が3分くらいで適当につくったキャラクターを使います。タナカさん(仮)です。
Paperというアプリで作りました。こういう時にタブレットがあると便利ですね

f:id:tsubaki_t1:20181228201904j:plain
タナカ氏

これを、前回と同じようなアプローチで動かせるようにします。

ボーンをつけて、ジオメトリを生成、ウェイトを調整して完成です。一つ違う点があるとすれば、PSBのマルチスプライトワークフローではない場合は最初にスプライトを選択しないとボーンが作れません。

f:id:tsubaki_t1:20181228202136j:plain
設定後のタナカ氏

登録作業完了後はシーンに配置して、親オブジェクトにSprite Skinコンポーネントを追加、Create Boneボタンでボーンを自動生成します。これで一つのスプライトを変形させて色々なポーズを取らせる事が出来るようになります。

f:id:tsubaki_t1:20181228202827j:plain
配置してSprite Skinを追加した

タナカさんをIKで動かせるようにする

アニメーションはFK(ボーンを回転させる)でも作れますが、幾つかのケースではIK(特定座標に到達するようにボーンを調整する)の方が楽です。なのでキャラクターの「頭~腰」と「手」「足」でIKをセットアップします。

最初にIK Manager 2DをルートのGameObjectに設定します。

「+」ボタンで、使用するIKの数(頭、右足、左足、右手、左手)だけ要素を作成します。
作成する種類は、手足はLimb、頭はChain(CCD)で作成しました。

f:id:tsubaki_t1:20181228203528j:plain
IK Manager 2Dを設定

作成したSolverで、BoneのEffectorとTargetを関連付けます。Effectorはボーンの最終到達点、TargetはEffectorが目指す先です。

SolverはEffectorの位置がTargetに到達するように、ボーンの位置を調整します。ボーンの最終的な向き(例えば足や剣の向き)はEffectorのTransformの向きが影響します。

f:id:tsubaki_t1:20181228204703j:plain
EffectorとTarget

実際にIKをセットアップします。やってることは簡単で、Lamb Solver 2DCCDSolver2DのEffectorにボーン末端のGameObjectをセットしているだけです。手や足首といった物があればソレになります。下の例では腕までしかボーンが無いので、GameObjectを追加してソレを割り当てています。

CCDSolverの場合は、影響を受けるボーンの数(Chain Length)もココで指定します。

f:id:tsubaki_t1:20181228205610g:plain
IKのセットアップ

この作業を頭手足、全てに適応すればIKのセットアップは一通り完了です。

アニメーションにする

最後に作ったキャラクターをアニメーションにして使えるようにします。
この時、2つの選択肢があります。IK「で」アニメーションさせるか、編集に「のみ」IKを使うか…の話です。

IKでアニメーションする場合、基本的に腕や足といったパーツをIKで動かす事になります。これは多分2D Animationで想定された使い方で、作るのは楽だし、段差などの微調整が必要な部分を解決してくれます。ただし計算コストがかかります。また腕が変な方向にフリップしたりします。こちらで作る場合は、Targetの位置やEffectorの向きをアニメーションで調整すれば良いです。

もう一つはIKは編集に使うだけで、基本的にはAnimatorで操作するといった場合です。今回はIKは編集用と割り切った方法をやってみます。コチラの場合は、各ボーンに動きを登録し、最終的にはIK Manager2D系は全て外す事になります(もしくはウェイト0で運用)

最初にやることは、各SolverのTargetをルートオブジェクトの子から外す事です。AnimationClipを編集する際、動かすと自動的にクリップに登録されるのを避ける為、親子関係は外しておきます。もし最終的なキャラクタから完全にIKを省く場合(Animation Clipだけでボーンを動かす場合)は、Solverも外しても良いです。

f:id:tsubaki_t1:20181228211715j:plain
TargetをRootの外に持たせる

次にアニメーションクリップを編集していきます。編集する前にはAnimation Windowのロックボタンを押しておきます。でないとウィンドウのフォーカスがちょくちょく外れる事になります。

f:id:tsubaki_t1:20181228212224j:plain
Animation Windowはロックしておく

さて、基本的なポーズ作りはTargetを動かしてIKを調整するのが楽で良いです。ただしTargetでボーンを動かしてもAnimationClipに位置が保存されません。なので、下のようなフローでキャプチャーしていきます。

  1. Targetを動かして、IKベースでポーズを作る
  2. 動かしたボーンを選択して、InspectorのTransformで「Add Key」
  3. 1~2を繰り返してアニメーションを作成
  4. IK Manager 2DのWeightを0にして、実際のアニメーションの動きを確認

https://user-images.githubusercontent.com/1644563/50515683-7cdc9780-0ae9-11e9-9925-e47e84370128.gif

この形でスプライトのアニメーションを作れば、作成後はIK関連のコンポーネントIK Manager 2DSolver各種を破棄してもアニメーションしてくれます。

感想

ということで、タナカ氏を無事動かすことが出来ました。

良い感じに…となると練習とセンスを鍛える必要がありそうですが、ちょっと動かすというモチベーションなら、結構楽に出来るんじゃないかなという感じです。

関連

チュートリアル動画(2D Animation V1)

www.youtube.com

前回の記事

tsubakit1.hateblo.jp