【2019年版】Unityでモーション再生を極めるためのロードマップ!Animator ControllerからPlayables APIまで

Unityでモーションを再生する方法はいくつかあり、またそれぞれの仕組みも複雑です。
この記事ではこれらの方法の概観を説明し、関連記事をピックアップすることで学びやすくまとめます。

Unityでモーションを再生する方法の概観まとめ

まず、Unityでモーション再生をするには以下の方法があります。

  1. Animator Controllerを使う
  2. Simple Animationを使う
  3. Timelineを使う
  4. Playables APIを使う
  5. (今後)Kinematicaを使う

まず一番スタンダードな方法がAnimator Controllerを使う方法です。
Animator Controllerはステートマシンを使ってモーションを状態管理します。
指定したトリガーを与えることで次のモーションに遷移します。

f:id:halya_11:20190721000638p:plain

Animator Controllerは非常に高機能ではあるのですが、ちょっとしたアニメーションを再生したいときには
オーバースペックで、逆に設定が面倒になってしまうことがあります。
このような場合には2.のSimple Animationを使います。

f:id:halya_11:20190721000928p:plain

また、カットシーン中にモーションを再生したい場合には3.のTimelineという機能が便利です。
Timelineを使うとクリップとして簡単にモーションを再生することができます。

f:id:halya_11:20190721001109p:plain

さてここまでAnimator ControllerとSimple AnimationとTimelineを紹介してきました。
これらは別々の機能ですが、実は内部的には同じ低レベルなAPIを使って実装されています。
それが4.のPlayables APIです。
スクリプトからこのAPIを使ってPlayable Graphを組むことによって非常に自由にモーションの仕組みが作れます。

f:id:halya_11:20190721001352p:plain

最後に、まだUnityが開発中の新しいアニメーションシステムとしてKinematicaがあります。
まだ情報は少ないですが、機械学習を使ったアニメーションシステムになるようです。

Animator Controller関連の記事まとめ

Animator Controllerはかなり多機能なので、当サイトでも色々な記事を書いています。

本当に基礎的な使い方の手順は他のサイトにお任せしますが、
各設定項目をちゃんと理解しておくことはとても大事なので次の記事で解説しています。

light11.hatenadiary.com

基本的な使い方が理解出来たらブレンドツリーを覚えておくと良いです。
これを使うと「歩き」と「走り」のモーションをブレンドして「小走り」のモーションを作れたりします。

light11.hatenadiary.com

次にモーション再生を理解する上で避けて通れないHumanoidとGenericの違いについて以下で説明しています。
Humanoidを使うと、全然違うキャラのために作った人型のモーションでも使いまわすことができます。
これは便利な機能ですが、人型限定だったり他にもいくつか制約があるのでしっかり理解しておく必要があります。

light11.hatenadiary.com

ちなみにHumanoid専用の機能として、モーションの一部だけをオブジェクトに追従させるIKがあります。
IKを使えばただ歩くだけのモーションを武器を持ちながら歩くモーションにできたりします。

light11.hatenadiary.com

もう一つHumanoid専用の機能として、モーションに合わせていい感じに移動させるためのTarget Matchingがあります。

light11.hatenadiary.com

さて、Animator Controllerはキャラクターごとに作る必要があります。
ただすべてのキャラクターについて一個一個Animator Controllerを作っていてはキリがありません。

こういったときに使えるのがAnimator Override Controllerです。
この機能を使うとAnimator Controllerのステートマシンは同じものを使いつつ、
アニメーションファイルだけを差し替えたものを量産できます。

light11.hatenadiary.com

またモーションに移動値が入ってたりすると、モーションを再生するときに勝手にキャラクターが移動してしまいます。
モーションを再生させつつも移動をスクリプトで制御したい場合には、ルートモーションの設定を行います。

light11.hatenadiary.com

例えば上半身と下半身で別々のモーションを再生したい場合にはAvatar Maskという機能が使えます。

light11.hatenadiary.com

これに関連して、再生中のモーションに別のモーションを加算したい場合にはLayerをAdditiveに設定します。

light11.hatenadiary.com

モーションに合わせて何かしらのパラメータ(吐息の量とか)を変更したい場合にはCurvesという機能が使えます。

light11.hatenadiary.com

またUnityのAnimator Controllerは現在のステート名が取りづらかったりするのですが、
これをエディタ拡張を用いて簡単に実現する方法も紹介しています。

light11.hatenadiary.com

またAnimator ControllerのTriggerはイベントを表現することが難しいので、以下のように拡張しておくと便利です。

light11.hatenadiary.com

ステートマシン

ちなみにですが、Animator Controllerでさらっと使われているステートマシンとは、
あるものをいくつかの状態とその遷移によって表すためのモデルです。

モーションとは直接的には関係ありませんが、この考え方については以下の記事で触れています。

light11.hatenadiary.com

light11.hatenadiary.com

Simple Animation

さてAnimator Controllerは高機能ですが、上述の記事の数からもわかるように複雑です。
シンプルにモーションを再生したいだけであればUnityが公式に開発しているSimple Animationというコンポーネントが使えます。

これについては以下の記事で紹介しています。

light11.hatenadiary.com

Timeline関連の記事まとめ

カットシーン中にモーションを再生したい場合にはTimelineという機能が便利です。
Timelineの基本的な使い方については以下の記事で説明しています。

light11.hatenadiary.com

またタイムラインを使っていると独自のクリップを作りたくなってきます。
この方法については以下の記事で紹介しています。

light11.hatenadiary.com

light11.hatenadiary.com

Playables API関連の記事まとめ

さてここまで紹介してきたAnimator ControllerとSimple AnimationとTimelineには、内部的にPlayables APIが使われています。
このAPIのうち、モーション再生にかかわる部分が公開されているので、
極端な話これを使えば自分でAnimator Controllerのようなものでさえ作れてしまいます。

プロジェクトに合わせた自由で効率的な設計を行いたい場合にはPlayables APIを使うのも手です。

以下の記事ではPlayables APIの基本的な使い方を紹介しています。

light11.hatenadiary.com

以下の記事では非ランタイムでPlayables APIを使ったり、
モーションプレビュー機能を作る方法を紹介しています。

light11.hatenadiary.com

light11.hatenadiary.com

以下の記事ではPlayables APIを再利用可能な設計にする方法をまとめています。

light11.hatenadiary.com

Kinematicaについて

KinematicaはUnityが開発していることを2018年に発表した新しいアニメーションシステムです。
機械学習を使うことで、煩雑なステートマシンを組むことなくモーションを再生できるようです。

blogs.unity3d.com

まだ正式リリースはされていませんが、今後Unityでモーションを再生する上で重要な機能となってくるのかもしれません。

その他

最後にその他、モーション再生に関わりそうな記事をまとめておきます。

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com