CGBoxの一部の記事にはアフィリエイト広告が含まれております。
【Unity】アニメーションが上手く動かない時の解決方法

こんにちは!Unityでキャラクターにアニメーションを設定したのはいいけど、上手く動かない…という経験をしたことがありませんか?
アニメーションが全く動かなかったり、位置がずれたりとなにかとつまずきやすいところですよね。
そこで本記事では、アニメーションを扱う時によく起きる問題と解決方法を紹介していきます!
アニメーションが再生されない

本項では、最もよく起きる「アニメーションが再生されない」問題が起きた時に試したい解決方法を紹介していきます。
今回アニメーションを設定するキャラクターとして、アセットストアから手に入るUnity-Chanの3Dモデルを利用します。
以下のリンクから無料でダウンロードすることができます。

モデルをHumanoid型にする
アニメーションを設定するキャラクターは、人型キャラクターが大半だと思います。
人型キャラクターのアニメーションが動かない時にまず確認したいのは
モデルのAnimation TypeをHumanoidに設定しているかどうかです。
下のように、キャラクターに設定してあるAnimator内のAvatarにはモデルが設定されています。

このモデルのインスペクターを開きRigタブ内のAnimation Typeを確認してみましょう。

こちらがGenericになっていることがあります。
このままですと、プログラムを実行しても人型のキャラクターのアニメーションが動きません。
その場合こちらをHumanoidに変更し、Applyを押しましょう。

Humanoid型とは何かについては下の記事で解説しています。

Animatorの設定を確認
Humanoid型にしてもアニメーションが再生されない場合、確認したいのがAnimatorの設定です。
キャラクターにアニメーションを設定するためには、下のようなAnimator内の
ControllerにAnimatorControllerをセットする必要があります。
この場合、Noneとなっておりセットされていませんのでアニメーションは動きません。

下のように、AnimatorControllerをドラッグアンドドロップで設定しておきましょう。

AnimatorControllerの設定を確認
AnimatorController内の設定も確認してみましょう。
キャラクターには、AnimatorControllerで設定された条件に沿ってアニメーションが適用されます。
このAnimatorController内の、矢印による遷移が上手く機能しているかを確認しましょう。

上の例ではRunのアニメーションを動かしたくても、Idle状態から矢印が繋がっていないためRunは再生されません。
下のように、MakeTransitionで矢印を伸ばし、Conditionsからアニメーションが切り替わる条件を正しく設定しておきましょう。

とにかく一つのアニメーションの動作を確認したいということであれば、下のようにEntryから直接つながるStateにアニメーションを設定すれば手っ取り早く動かすことができます。
まずはこのようにして動くことを確認してから、遷移条件の確認をすることがオススメです。

アニメーションの位置がずれる
アニメーションをループ再生していると、位置がだんだんとずれていったり
向きが微妙に変わっていったりする場合があります。
そんな時のために、アニメーションの位置や向きを固定する項目があります。
まず再生しているアニメーションのインスペクターを開きましょう。

インスペクター内に下のような設定項目があります。
このうち、下の三項目のBake into Poseにチェックを入れるようにしましょう。
- Root TranformRotation
- Root Transform Position(Y)
- Root Transform Position(XZ)

これにより、キャラクターがアニメーションによる移動や回転の影響を受けなくすることができます。
アニメーションクリップが編集できない
アニメーションクリップを編集しようとした時に、下のように「Read-Only」と表示され、編集できない場合があります。

そんな時は、インスペクターからEdit画面が開ける場合はそこから編集するか

編集したいアニメーションクリップを選択した上でCtrl+Dを押し、複製してみましょう。

すると下のように新たにアニメーションクリップが複製され

複製された方のクリップではRead-Onlyが外れて編集できるようになっています。

アニメーションのループが上手くできない
アニメーションにはループ再生をする設定項目があります。

アニメーションクリップ内のLoopTimeにチェックを入れることで設定できるのですが
このループが違和感のある繋がり方になることがあります。

そんなときに確認したい項目を二つ紹介します。
一つ目は、正しくループしているかを示すloop matchの色です。
アニメーションクリップ内では、下のようにループの開始位置と終了位置を指定することができます。

この開始位置と終了位置によってはループが自然に繋がらず、loop matchが赤色や黄色で表示されるのです。
この位置を調整して、すべてが緑色になるようにしましょう。
そしてもうひとつ、下のようなLoop Poseという設定項目があります。

Loop Poseはループ遷移を滑らかにしてくれる設定なので、チェックを入れておきましょう。
これらを設定すると下のようにループの不自然さが改善されました。

アニメーションのループ再生については、下の記事でも解説しています。

おすすめアセット
Mega Animations Pack

Mega Animations Packは、220種類以上のアニメーションが入ったアセットです。
戦闘用のモーションから、コミカルな動きのモーションなど様々な種類が含まれています。
武器や小道具も充実しておりお得感のあるアセットです。
FPS Animation Framework


FPS Animation Frameworkは、FPSゲームに使えるアニメーションが入ったアセットです。
銃を構えるアニメーションやリロードなど、FPSゲームに必須のアニメーションが含まれています。
FPSゲームを開発する際に必ず役に立つアセットです。
まとめ
以上、アニメーションが上手く動かない時の解決方法について解説してきました。
アニメーションが動かない原因、解決方法は様々です。
本記事で紹介した方法で問題が解決されれば嬉しいです!