前回は、Unity の見下ろし型ゲームの作成支援アセット「TopDown Engine」のサンプル KoalaRifle 銃を手本にして、公式レシピで作成した TestWeapon の見た目の画像を設定しました。
前回の記事:TopDownEngine サンプル銃の外観を独自の画像に変更 | Compota-Soft-Press
![](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-サンプル-KoalaRifle-と同じオブジェクト構成(上位のみ)を作成し、ModelContainer-に-SpriteRender-を付加してその-Sprite-に先ほどの画像を設定します.Model_-1024x507.png)
今回は、その KoalaRifle プレハブについていた Animator コンポーネントに設定されている Animator Controller の各ステートがどのようにアニメーションするかについて調べます。
※ Unity のバージョン 2021.3.25f1、 TopDown Engine のバージョンは 3.2 です。
KoalaRifle の Animator Controller の表示
TopDown Engine サンプルの KoalaRifle プレハブを Project ウィンドウで検索しダブルクリックすると Hierarchy / Scene / Inspector ウィンドウで構成を確認・編集できます。
※アセットパスは Assets/TopDownEngine/Demos/Koala2D/Prefabs/Weapons/Weapons/KoalaRifle.prefab です。
Hierarchy ウィンドウで KoalaRifle ゲームオブジェクトの下位の Model ゲームオブジェクトを選択すると Inspector ウィンドウで Animator コンポーネントを付加されていることがわかります。
![TopDownEngine サンプル KoalaRifle プレハブをダブルクリックすると Hierarchy ウィンドウなどで構成を編集できます.](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-サンプル-KoalaRifle-プレハブをダブルクリックすると-Hierarchy-ウィンドウなどで構成を編集できます-1024x672.png)
KoalaRifle(ProjetileWeapon) プレハブの下位の Model ゲームオブジェクトを選択し、付加されている Animator コンポーネントの Controller のプロパティを選択すると、設定されている Animator Controller が Project ウィンドウで選択されるので、それをダブルクリックして Animator ウィンドウでそのステートたちの遷移を表すグラフを表示します。
![TopDownEngine サンプル KoalaRifle>Model の Animator Controller のノードグラフを Animator ウィンドウで表示します..](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-サンプル-KoalaRifle>Model-の-Animator-Controller-のノードグラフを-Animator-ウィンドウで表示します-1024x611.png)
KoalaRifle の Animator Controller のステートのグラフ
KoalaRifle で設定されている Animator Controller のステートについて調べました。
検証用の複製 Animator Controller の作成と消しゴム銃プレハブへの設定
設定を変更して試すためと、後で消しゴム銃用に独立して使えるように、 KoalaRifleAnimator Animator Controller を Project ウィンドウで選択して Ctrl + D で複製しました。
以下では、複製した TestWeaponAnimator Animator Controller を用います。
![TopDownEngine サンプル KoalaRifle の Animation Controller のノードグラフ..](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-サンプル-KoalaRifle-の-Animation-Controller-のノードグラフ-1024x372.png)
上図の KoalaRifleAnimator を複製した TestWeaponAnimator のステートのグラフは以下です。
![TopDownEngine サンプル KoalaRifleAnimator を複製した TestWeaponAnimator のノードグラフ](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-サンプル-KoalaRifleAnimator-を複製した-TestWeaponAnimator-1024x510.png)
これだけだと、動かすモデル(今回はスプライト画像)がないので、サンプル KoalaRifle(ProjectileWeapon) の下位の Model ゲームオブジェクトの Animator と同様に Controller プロパティに複製した TestWeaponAnimator を設定します。
※ KoalaRifle プレハブの下位の Model ゲームオブジェクトに Animator コンポーネントを追加してから行ってください。
![TopDownEngine KoalaRifleAnimator を複製したものを TestWeapon のModelのAnimatorの Controller に設定します.](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-KoalaRifleAnimator-を複製したものを-TestWeapon-のModelのAnimatorの-Controller-に設定します.png)
各ステートについて
必須のステートと KoalaRifle で独自に追加されたステートについて説明します。
![TopDownEngine サンプル KoalaRifleAnimator を複製した TestWeaponAnimator のノードグラフ](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-サンプル-KoalaRifleAnimator-を複製した-TestWeaponAnimator-1024x510.png)
Entry
Entry と Exit は必ず存在するステートです。
Entry ステートは、ステートマシンの遷移開始時に評価され、そのときの条件に応じて矢印で示された遷移先ステートに移動します。
ステートマシンでは必ずデフォルトステート(オレンジ色のステート)を持っているので、何もステートを追加していない場合は、デフォルトステートに遷移します。
新規ステートの作成と、遷移先の追加
上図の AnimatorController では、緑色の Entry からオレンジ色の KoalaRifle_Idle デフォルトステートのステートへの 1 つの遷移先しかありません。
※オレンジ色の矢印はデフォルトの遷移先を表します。
![Unity Animator ウィンドウの Entry からのオレンジ色の矢印はデフォルトの遷移先を表します.](https://compota-soft.work/wp1/wp-content/uploads/2023/05/Unity-Animator-ウィンドウの-Entry-からのオレンジ色の矢印はデフォルトの遷移先を表します.png)
もしも、初期のアニメーションを状態によって切り替えたい場合は、新しいステートを作って、遷移先を追加することができます。
ステートを追加するには、Animator ウィンドウ内の余白部分で右クリックして表示されるメニュー Create State > Empty を選択します。
そうすると New State という名前のステートが新規作成されました。
そのステートを選択することで Inspector ウィンドウで名前などの設定を変えることが出来ます。
![Unity Animaor ウィンドウでノードを新規作成するには右クリックでメニューを表示して Create State > Empty を選択します.](https://compota-soft.work/wp1/wp-content/uploads/2023/05/Unity-Animaor-ウィンドウでノードを新規作成するには右クリックでメニューを表示して-Create-State->-Empty-を選択します.png)
ステート同士は矢印で結ばれることで遷移関係が設定できます。
新たな遷移先を指定する場合は、遷移元のステートを右クリックして表示されるメニュー Make Transition を選択したあと、遷移先のステートにマウスポインタを移動させて、そのステートをクリックします。
削除したい場合は、矢印の線をクリックして選択してから del キーを押します。
![Unity Animator 遷移先ノードを指定する手順](https://compota-soft.work/wp1/wp-content/uploads/2023/05/Unity-Animator-遷移先ノードを指定する手順.gif)
Default Entry Transitions のオレンジの矢印以外の矢印を選択すると、 Inspector ウィンドウで遷移条件などを指定できます。
![Unity Animator ウィンドウの遷移先の矢印を選択することで遷移条件などを指定できます.](https://compota-soft.work/wp1/wp-content/uploads/2023/05/Unity-Animator-ウィンドウの遷移先の矢印を選択することで遷移条件などを指定できます.png)
Exit
Exit ステートは、ステートマシンの終了状態です。今回は遷移先として設定されていないので使用されません。
もしも今のステートマシンが、上位から呼び出されたサブステートマシンだった場合は、上位のステートマシンの呼び出し元に戻ります。
参照:ステートマシンの遷移 – Unity マニュアル
Any State
Any State も常に存在する特殊なステートのステートです。今回は遷移先が設定されていないので使用されません。
遷移先を指定することで、今のステートマシンの状態にかかわらず、遷移先の条件にあったステートに遷移できます。
参照:アニメーションステート – Unity マニュアル
KoalaRifle_Idle
デフォルトステートのステートでもある KoalaRifle_Idle ステートを選択すると Inspector ウィンドウに遷移先リストや Motion (Animation Clip)が設定されています。
![TopDownEngine KoalaRilfle_Idle ステートノードを選択するとInspectorウィンドウにアニメーションの設定や遷移先リストが表示されます..](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-KoalaRilfle_Idle-ステートノードを選択するとInspectorウィンドウにアニメーションの設定や遷移先リストが表示されます.png)
Motion の KoalaRifleIdle.anim AnimationClip を選択した後、 Project ウィンドウでそれをダブルクリックすると Animation ウィンドウが開かれますが、特にアニメーションの設定は行われていません。
![TopDownEngine KoalaRilfle の Idle ステートノードのアニメーションには設定が見当たりません.](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-KoalaRilfle-の-Idle-ステートノードのアニメーションには設定が見当たりません.png)
何もしていないとき状態が一定時間経過したら武器を動かすアニメーションなどをいれたい場合は、これを編集すると良いでしょう。
SimpleRecoil
Recoil の訳は反動です。
Motion には、 Idle とは異なる Animation Clip が設定されていて、遷移先は Idle に戻る遷移のみです。
![TopDownEngine KoalaRifle の SimpleRecoil ノードを選択すると Motion に別の物が設定されています.](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-KoalaRifle-の-SimpleRecoil-ノードを選択すると-Motion-に別の物が設定されています.png)
KoalaRifleShoot AnimationClip を Project ウィンドウでダブルクリックして、Animation ウィンドウで開きます。
そうすると、Idle とは異なり、Position (位置) , Rotation (角度) , Scale (拡大率) が 3 秒間にわたって変化するアニメーションが設定されています。
※再生ボタンが非活性の場合は、Animator Controller がプレハブに設定されていない可能性があります。その際はアニメーションさせたいプレハブに Animator コンポーネントを追加して前述のように Animator Controller を設定してください。
![TopDownEngine KoalaRifle の SimpleRecoil ノードのアニメーションでは位置が変化します.](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-KoalaRifle-の-SimpleRecoil-ノードのアニメーションでは位置が変化します.png)
再生ボタンを押してアニメーションを Scene ウィンドウで確認します。
※ Project ウィンドウで TestWeapon プレハブをダブルクリックして Scene ウィンドウに表示しています。
銃を撃ったときの反動が横移動によって表現されるようになりました。
![TopDownEngine KoalaRifleShoot AnimationClip を適用した後の動作](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-KoalaRifleShoot-AnimationClip-を適用した後の動作.gif)
KoalaRifle_HeavyRecoil
前述の SimpleRecoil と同様ですが、今度は重い反動がついた Animation Clip が Motion に設定されています。
![TopDownEngine KoalaRifle の HeavyRecoil ノードを選択すると Motion に別の物が設定されています.](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-KoalaRifle-の-HeavyRecoil-ノードを選択すると-Motion-に別の物が設定されています.png)
先ほどと同様に今度は KoalaRifleHeavyRecoil アニメーションクリップを Animation ウィンドウで確認すると、位置・角度・拡大率のアニメーションが先ほどより少し長い時間で設定されています。※Animation ウィンドウの左上のアニメーションクリップ名をクリックすると他のアニメーションクリップと切り替えられます。
![TopDownEngine KoalaRifle の HeavyRecoil ノードのアニメーションでは位置角度拡大率が変換します.](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-KoalaRifle-の-HeavyRecoil-ノードのアニメーションでは位置角度拡大率が変換します.png)
再生してみると、先ほどの横移動に回転が加わった銃の重い反動が表現されています。
![TopDownEngine KoalaRifleHeabyRecoil AnimationClip を適用した後の動作](https://compota-soft.work/wp1/wp-content/uploads/2023/05/TopDownEngine-KoalaRifleHeabyRecoil-AnimationClip-を適用した後の動作.gif)
まとめ
今回は、Unity の見下ろし型ゲームの作成支援アセット「TopDown Engine」のサンプル KoalaRifle を参考にして、状態別のアニメーションを管理する Animator Controller の設定や、その中のそれぞれのアニメーションの設定について紹介しました。
銃を撃ったときの反動を、横に移動するアニメーションや、少し回転させるアニメーションで表現していることがわかりました。
参照サイト Thank You!
- Unity のリアルタイム開発プラットフォーム | 3D/2D、VR/AR のエンジン
- TopDown Engine | システム | Unity Asset Store
- Weapons | TopDown Engine Documentation #setting-up-projectiles-for-damageables-and-non-damageables
- ステートマシンの遷移 – Unity マニュアル
- アニメーションステート – Unity マニュアル
記事一覧 → Compota-Soft-Press
コメント