Unityでモーションを再生する方法はいくつかあり、またそれぞれの仕組みも複雑です。
この記事ではこれらの方法の概観を説明し、関連記事をピックアップすることで学びやすくまとめます。
- Unityでモーションを再生する方法の概観まとめ
- Animator Controller関連の記事まとめ
- ステートマシン
- Simple Animation
- Timeline関連の記事まとめ
- Playables API関連の記事まとめ
- Kinematicaについて
- その他
Unityでモーションを再生する方法の概観まとめ
まず、Unityでモーション再生をするには以下の方法があります。
- Animator Controllerを使う
- Simple Animationを使う
- Timelineを使う
- Playables APIを使う
- (今後)Kinematicaを使う
まず一番スタンダードな方法がAnimator Controllerを使う方法です。
Animator Controllerはステートマシンを使ってモーションを状態管理します。
指定したトリガーを与えることで次のモーションに遷移します。
Animator Controllerは非常に高機能ではあるのですが、ちょっとしたアニメーションを再生したいときには
オーバースペックで、逆に設定が面倒になってしまうことがあります。
このような場合には2.のSimple Animationを使います。
また、カットシーン中にモーションを再生したい場合には3.のTimelineという機能が便利です。
Timelineを使うとクリップとして簡単にモーションを再生することができます。
さてここまでAnimator ControllerとSimple AnimationとTimelineを紹介してきました。
これらは別々の機能ですが、実は内部的には同じ低レベルなAPIを使って実装されています。
それが4.のPlayables APIです。
スクリプトからこのAPIを使ってPlayable Graphを組むことによって非常に自由にモーションの仕組みが作れます。
最後に、まだUnityが開発中の新しいアニメーションシステムとしてKinematicaがあります。
まだ情報は少ないですが、機械学習を使ったアニメーションシステムになるようです。
Animator Controller関連の記事まとめ
Animator Controllerはかなり多機能なので、当サイトでも色々な記事を書いています。
本当に基礎的な使い方の手順は他のサイトにお任せしますが、
各設定項目をちゃんと理解しておくことはとても大事なので次の記事で解説しています。
基本的な使い方が理解出来たらブレンドツリーを覚えておくと良いです。
これを使うと「歩き」と「走り」のモーションをブレンドして「小走り」のモーションを作れたりします。
次にモーション再生を理解する上で避けて通れないHumanoidとGenericの違いについて以下で説明しています。
Humanoidを使うと、全然違うキャラのために作った人型のモーションでも使いまわすことができます。
これは便利な機能ですが、人型限定だったり他にもいくつか制約があるのでしっかり理解しておく必要があります。
ちなみにHumanoid専用の機能として、モーションの一部だけをオブジェクトに追従させるIKがあります。
IKを使えばただ歩くだけのモーションを武器を持ちながら歩くモーションにできたりします。
もう一つHumanoid専用の機能として、モーションに合わせていい感じに移動させるためのTarget Matchingがあります。
さて、Animator Controllerはキャラクターごとに作る必要があります。
ただすべてのキャラクターについて一個一個Animator Controllerを作っていてはキリがありません。
こういったときに使えるのがAnimator Override Controllerです。
この機能を使うとAnimator Controllerのステートマシンは同じものを使いつつ、
アニメーションファイルだけを差し替えたものを量産できます。
またモーションに移動値が入ってたりすると、モーションを再生するときに勝手にキャラクターが移動してしまいます。
モーションを再生させつつも移動をスクリプトで制御したい場合には、ルートモーションの設定を行います。
例えば上半身と下半身で別々のモーションを再生したい場合にはAvatar Maskという機能が使えます。
これに関連して、再生中のモーションに別のモーションを加算したい場合にはLayerをAdditiveに設定します。
モーションに合わせて何かしらのパラメータ(吐息の量とか)を変更したい場合にはCurvesという機能が使えます。
またUnityのAnimator Controllerは現在のステート名が取りづらかったりするのですが、
これをエディタ拡張を用いて簡単に実現する方法も紹介しています。
またAnimator ControllerのTriggerはイベントを表現することが難しいので、以下のように拡張しておくと便利です。
ステートマシン
ちなみにですが、Animator Controllerでさらっと使われているステートマシンとは、
あるものをいくつかの状態とその遷移によって表すためのモデルです。
モーションとは直接的には関係ありませんが、この考え方については以下の記事で触れています。
Simple Animation
さてAnimator Controllerは高機能ですが、上述の記事の数からもわかるように複雑です。
シンプルにモーションを再生したいだけであればUnityが公式に開発しているSimple Animationというコンポーネントが使えます。
これについては以下の記事で紹介しています。
Timeline関連の記事まとめ
カットシーン中にモーションを再生したい場合にはTimelineという機能が便利です。
Timelineの基本的な使い方については以下の記事で説明しています。
またタイムラインを使っていると独自のクリップを作りたくなってきます。
この方法については以下の記事で紹介しています。
Playables API関連の記事まとめ
さてここまで紹介してきたAnimator ControllerとSimple AnimationとTimelineには、内部的にPlayables APIが使われています。
このAPIのうち、モーション再生にかかわる部分が公開されているので、
極端な話これを使えば自分でAnimator Controllerのようなものでさえ作れてしまいます。
プロジェクトに合わせた自由で効率的な設計を行いたい場合にはPlayables APIを使うのも手です。
以下の記事ではPlayables APIの基本的な使い方を紹介しています。
以下の記事では非ランタイムでPlayables APIを使ったり、
モーションプレビュー機能を作る方法を紹介しています。
以下の記事ではPlayables APIを再利用可能な設計にする方法をまとめています。
Kinematicaについて
KinematicaはUnityが開発していることを2018年に発表した新しいアニメーションシステムです。
機械学習を使うことで、煩雑なステートマシンを組むことなくモーションを再生できるようです。
まだ正式リリースはされていませんが、今後Unityでモーションを再生する上で重要な機能となってくるのかもしれません。
その他
最後にその他、モーション再生に関わりそうな記事をまとめておきます。