Unityで開発をしていると、キャラクターにこんな動きをさせたい!と思うことがあると思います。
そんなときUnityのアニメーション機能を使うと便利です。
そしてアニメーション機能を使う上で、大事になるのがループの設定です。
今回はその、アニメーションをループさせる方法について解説していきます!
アニメーションループの設定方法
アニメーションのループを設定するために、以下の手順で解説していきます。
- キャラクターを配置する
- アニメーションを設定する
- アニメーションをループさせる
それでは、順番に設定していきましょう。
キャラクターを配置する
今回はFreeAssetの「Character Pack: Free Sample」からキャラクターの3Dモデルとアニメーションをお借りして、アニメーションを設定していきます。
下記サイトからアセットをダウンロードして、Unityにインポートしてください。

まずは地面として、3DObject→Planeを作成しておきます。

インポートしたアセットから、キャラクターをシーンに配置します。
インポートした「Supercyan…」フォルダ→Prefabs→Base→High Quality→MaleFree1をヒエラルキーにドラッグアンドドロップします。

最初はキャラクターが後ろを向いているので、見やすいようにカメラ位置を変更します。
これでアニメーションを設定していくキャラクターが配置できました。

アニメーションを設定する
ここからはキャラクターに、手を振るアニメーションを設定していきます。
Asssets内で右クリック→Create→Animator Controllerを作成。
Animator Controllerとはキャラクターのアニメーションを制御する機能のこと。

後からわかりやすいように、名前を「ManAnimator」に変更しておきます。

作成したManAnimatorをダブルクリックで開きましょう。
Animatorタブ内で右クリック→Create State→Emptyで新しい状態を作成。
名前を「New State」から「Wave」に変更しておきます。

作成したWaveにアニメーションを割り当てます。
「Motion」項目の◎ボタンをクリック、一番下にある「wave」を選択します。

これでManAnimatorに手を振るアニメーションを設定することができました。
続いて、キャラクターにManAnimatorをアタッチしていきます。
先ほど配置したキャラクターのインスペクターを開きます。
Controller項目の◎をクリックし、作成したManAnimatorを選択します。

ここまで設定できたら、実行してアニメーションを確認してみましょう。
一度アニメーションが再生されると動きが止まってしまいます。
ここからループするように設定していきましょう。

アニメーションをループさせる
手を振る動きをループさせたいときは、アニメーションのループ設定をONにする必要があります。
Assetsフォルダ→「Supercyan…」→Animations→一番下の「common_people@wave」を選択しインスペクターを開きます。
Loop Timeという項目があり、これにチェックを入れるとループするようになります。
チェックを入れたら、最後に最下部のApplyボタンを押して変更を反映しましょう。

再び実行してアニメーションを確認してみましょう。
ループ設定が反映されて、手を振る動作を繰り返すようになりました。

アニメーションのループがうまく動かない時
アニメーションがループしない
アニメーションがループしない時確認したいのは、Loop Timeにチェックを入れた後、必ずApplyボタンを押すことです。
Loop Timeにチェックを入れてエディタ上で変更したように見えても、Applyを押さずに閉じてしまうと変更が反映されずループが設定できていないので注意しましょう。

アニメーションが一瞬止まる
ループ再生を設定すると、アニメーションによっては一瞬止まるように見えることがあります。
先ほどのキャラクターで、投げる動作をループさせてみます。
アニメーションの開始フレームと最終フレームのところが上手くつながっていないと、下のようにカクッとした動きになってしまいます。

Unityのアニメーションにはループ変遷をなめらかにする「Loop Pose」という機能が用意されています。
ループさせているアニメーションのインスペクターから、LoopTimeの下にある「Loop Pose」にチェックを入れ、Applyを押すことで設定できます。

実行してみるとループがなめらかになり、カクッとした動きが軽減されました。

アニメーションがずれる
ループ再生をすると、アニメーションがずれる場合もあります。
そんなときに設定したい項目を紹介します。
まずは、「Root Transform Rotation」です。
この項目はアニメーションの回転に関する設定になります。

Bake Into Poseにチェックを入れると、キャラクターの向きがアニメーションの回転による影響を受けなくなります。
←がチェックを入れていないキャラクター、→がチェックを入れたキャラクターです。

左のキャラクターはループによって、顔の向きが動きすぎているように見えます。
Bake Into Poseにチェックを入れた右のキャラクターは、顔の動きが安定するようになりました。
続いて紹介するのは、「Root Transform Position(Y)」です。
これはY軸方向の動きに関する設定項目です。

Bake Into Poseにチェックを入れると、アニメーションによるキャラクターのY軸方向の移動が無効になります。
←がチェックを入れていないキャラクター、→がチェックを入れたキャラクターです。

頭に注目すると分かりやすいのですが、左のキャラクターは上下の動きが大きく、ループが上手く繋がっていません。
Bake Into Poseにチェックを入れた右のキャラクターは、ブレが少なく動くようになりました。
今回は割愛しますが、Root Transform Position(XZ)という項目もあります。
こちらではX,Z軸方向のアニメーションによる動きが制限できます。
アニメーションが横にずれる場合はそちらのBake Into Poseを設定してみましょう。
アニメーションをスクリプトから一定回数ループさせたい時
アニメーションを一定回数だけループさせたいときもあるかと思います。
Animator.GetCurrentAnimatorStateInfo(0).normalizedTime
そんな時は上のコードで、アニメーションを繰り返した回数が取得できます。
再生開始時は0、半分再生すると0.5、10回再生すると10といったようにループ回数が取得できるので
if(Animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 10)
{
Animator.enabled = false;
}
このように10回再生したらアニメーションを無効にしますよ、といった使い方もできます。
おすすめアセット
FREE – 32 RPG Animations
こちらはRPG制作に使えるアニメーションが入った無料アセットです。
移動アニメーションから、攻撃、魔法モーションまで含まれています。
RPGを作りたい方や、アニメーション設定を色々試してみたい方にオススメです!

Low Poly Animated People
こちらは有料になりますが、100種類以上の人型キャラクターとアニメーションが含まれたアセットです。
Low Polyで作られていてかわいい雰囲気のキャラクターなので、世界観が合っているならオススメです!

まとめ
- アニメーションのループ再生は「Loop Time」にチェック
- Applyで変更確定を忘れずに
- 「Loop Pose」でループがなめらかに
- 「Bake Into Pose」でずれを直そう
以上、アニメーションのループ再生について解説してきました。
アニメーションの設定はとっつきにくいですが、アセットを使えば楽に設定できます。
使いこなせれば見栄えが格段にアップするので、ぜひマスターしたい分野ですね!
コメント