ゲーム制作   Unity ソフトウエア 

Unity ソフトウエアでゲーム制作#1モグラたたき編(9.アニメーターコントローラー)

キャッチ画像モグラたたき連続画像からアニメを作る

本投稿は2024年9月時点の内容になります。アップデートにより変更となる場合があります。また環境によって違いがあると思いますのであくまで参考として、ご了承ください。

様々な書籍、ブログや動画を参考にさせていただきました。多すぎて一つ一つは紹介できませんが感謝です。

初心者の自分がUnity ソフトウエアでゲームを作ってみました。とりあえずシンプルなものということでモグラたたきに挑戦です。ゲーム作ってみるかという感じになったときに、いいタイミングで某ゲームのイベントシナリオ内ミニゲームにモグラたたきが実装されていたのでUIとかエフェクトとか、諸々の仕様をぱくって参考にして作ってみましたよ。様々なHowToの中の選択肢のひとつとして、同じ初心者さんの参考になればよいです。

\ チェック /

ゲームオブジェクトにアニメーターをつける

前回作成したアニメーションクリップを使ってゲームオブジェクトで動かすためにアニメーターコントローラーで遷移を管理していきます。

本記事のポイント

  • アニメーターコントローラーを作成してオブジェクトにアタッチする方法
  • アニメーターコントローラーでアニメーションクリップを遷移させる方法を解説
  • パラメーターを使った遷移の方法を解説
  • 実際にアニメーターでゲームオブジェクトを動かす

\ アニメーションクリップについては前回をチェック /

アニメーターコントローラーを作成してゲームオブジェクトにアタッチする

まずはアニメーションをコントロールするアニメーターコントローラーを作成して、対象のオブジェクトにアタッチします。

アニメーターコントローラーを作成

  1. プロジェクトの任意のフォルダーで 右クリック>「作成」>「アニメーターコントローラー」で任意の名前で新規作成します。今回名前は「EnemyMove」にしました。
  2. アニメーションしたいゲームオブジェクトに「Animator」コンポーネントを追加します。
  3. インスペクターで「Animator」のプロパティの「コントローラー」にアニメーターコントローラーを(今回は「EnemyMove」)アサインします。

これでゲームオブジェクトをアニメーションする準備ができました。

アニメーターコントローラーの使い方

アニメーターコントローラー解説

アニメーションの遷移を作っていきます。まずは簡単なアニメーターコントローラーの概要です。

アニメーターコントローラーざっくり解説

  1. 作成したアニメーターコントローラーをダブルクリックするか、タブをクリックしてアニメーターウィンドウを開きます。
  2. アニメーターウィンドウはマウスホイールで拡大縮小、「alt」キーを押しながらドラッグでウィンドウ内を移動、「A」キーを押すとウィンドウにフィットさせてくれます。各ステートはドラッグで動かせます。
  3. アニメーションの遷移はステートマシンになっています。
  4. アニメーションの状態を表す「ステート」
  5. ステートをつなぐ「ノード」で管理されています。
  6. ステートはアニメーターの状態を表します。デフォルトで配置されている「Entry」は遷移の開始位置、「Exit」は終了状態をあらわすときに使います。「AnyState」は特殊なステートで、現在どのステートにいるかに影響を受けることなく、特定のステートに遷移したい場合に使えます。

アニメーターコントローラーで遷移を作っていきます

ステートの作成

アニメーション遷移作成その1-必要なステートを作成する

  1. ステートの作成方法その1
  2. アニメーターウィンドウで右クリック>「ステートの作成」>「空」
  3. 作成された空のステートをクリックしてインスペクターの「Motion」に対象となるアニメーションクリップをアタッチします。
  1. ステートの作成方法その2(推奨)
  2. アニメーションクリップをプロジェクトからアニメーターウィンドウにドラッグアンドドロップ

ノードの作成

次にステートをノードで繋いでいきます。

アニメーション遷移作成その2-ステートをノードで繋ぐ

  1. その1 デフォルトステート(「Entry」直後のステート)の設定
  2. 「Entry」で右クリック>「ステートマシンのデフォルトステートを設定する」をクリック
  3. 矢印が出るので対象のステートを選択します。今回は「Rise」に設定しました
  4. 「Entry」から「Rise」にオレンジ色のノードができます
  1. その2 他のステートもノードで繋いでいきます
  2. ステート上でで右クリック>「遷移を作成」をクリック
  3. 矢印が出るので遷移先のステートを選択します。
  1. その3 ノード(遷移)を取り消したいとき
  2. 遷移元のステート、もしくは削除したいノードを選択
  3. インスペクターの「Transitions」にノードが表示されています
  4. 削除対象のノードを選択して「-」をクリックします

パラメータの作成

今回はマウスクリックでアニメーションを変更したいので、そのためにパラメータを準備します。

アニメーション遷移作成その3-パラメーターの準備

  1. アニメータウィンドウの左上パラメーターの「+」をクリックしてタイプを選びます。
  2. 任意の名前を付けます。
  3. パラメーターの値はスクリプトから変更できます。
  1. パラメーターの種類
  2. 「Int」整数型 使用例:アイテム強化段階によってアニメが変わる場合とかに使えそうです。一つのステートからいくつも分岐がある場合 enum型とかテンキー入力との組み合わせるも良さそうです。
  3. 「Float」小数型 使用例:移動のスピードによって「ゆっくり歩く」「歩く」「走る」「強ダッシュ」と遷移させたいとき
  4. 「Bool」真偽型 使用例:状態の有無(オンオフ)で遷移させたい場合
  5. 「Trigger」特殊な真偽型で遷移が消費されるとコントローラーによってリセットされる 使用例:キー入力でジャンプや攻撃アクションをするときなど一回きりのアクションと相性が良さそうです。 今回はTrigger型で「HasClicked」というパラメーターを作りました

次にノード(遷移)を編集していきます。

アニメーション遷移作成その4-遷移の編集

  1. 編集対象のノードをクリックします。
  2. インスペクターの「Settings」をクリックするとプロパティが開くので、編集していきます。
  1. プロパティの概要です。
  2. 「終了時間あり」チェックすると後述の「終了時間」で次のステートに遷移します
  3. 「終了時間」アニメの終了時間。割合表示です。「1」がフル再生1回。「0.5」で50%再生。ループありアニメで「3」にするとフル再生3回です。
  4. 「固定間隔」チェックありだと、後述の「遷移間隔」が秒指定、なしだと%指定
  5. 「遷移間隔」アニメーションのブレンド時間 0にするとすぐに次のステートに切り替わります。
  6. 「遷移のオフセット」遷移先のアニメーションの開始位置です。
  7. 「中断要因」アニメーションのの割り込み設定。アクションゲームで攻撃モーションキャンセルからの回避とかに使えそうです。
  8. 「Conditions」前述のパラメータを使った遷移の設定に使います。
  9. もっと詳しく知りたいときはリファレンスをチェックしてみてください

以下今回の設定になります。

今回の参考設定

  1. 「Rise」->「Idle」(終了時間あり・終了時間「1」・遷移間隔「0」)
  2. 「Idle」->「UnClickReaction」(終了時間あり・終了時間「3」・遷移間隔「0」)
  3. 「Idle」->「ClickReaction」(終了時間なし・遷移間隔「0」・Conditions「HasClicked」)
  4. 「UnclickReaction」->「Crouch」(終了時間あり・終了時間「0.78」・遷移間隔「0」)
  5. 「clickReaction」->「CrouchAfterReaction」(終了時間あり・終了時間「1」・遷移間隔「0」)

アニメーションパラメーターを変更するスクリプト

クリックしたらアニメーションパラメーター「HasClicked」をOnにするスクリプトを書いていきます。

public class EnemyController : MonoBehaviour, IPointerDownHandler//インターフェースを実装したクラスであると宣言
{
    public EnemyStatus enemyStatus {  get; set; }
    [SerializeField] UnitStatusDB characterStatusDB;
    //フィールドAnimatorのenemyMove
    [SerializeField] Animator enemyMove;

    //省略


    //IPointerDownHandlerインターフェースの関数
    //マウスが押されたメッセージを受け取り実行される
    public void OnPointerDown(PointerEventData eventData)
    {
        //アニメーションパラメーターTriggerをオンにする
        enemyMove.SetTrigger("HasClicked");
    }

スクリプトざっくり解説

  1. (6)フィールドAnimatorのenemyMoveの設定
  2. (17)クリックイベントでアニメーションパラメーターTriggerをオンにする。
  3. シーンに戻ってゲームオブジェクトのEnemyMoveにアニメーターをアサインします。ゲームオブジェクトに自身がコンポーネントに持っているAnimatorをドラッグアンドドロップします。

ゲーム再生してみましょう。何もしない場合は「立つ>待機>しゃがみ」、クリックを途中で入れると「立つ>待機>Good>しゃがむ」になればOKです。 

まとめ

まとめ

  • アニメーターコントローラーでアニメーションクリップの遷移を管理できる。
  • アニメーションパラメーターにはいろいろな種類があるので使い分けしていこう。
  • ゲームオブジェクトにアニメーターコンポーネントを介してアニメーターコントローラーをアサインすることでゲームオブジェクトをアニメーション
ユニティちゃん公式ホームページへ
ユニティちゃん公式ホームページ
ユニティちゃんライセンス
ユニティちゃんの画像、素材、ライセンスロゴはユニティちゃんライセンス条項を元に使用しています

\ 初学に使った書籍です /

動画×解説でかんたん理解! Unityゲームプログラミング超入門

大角 茂之/大角 美緒

マケイヌ的おすすめ度

わかりやすい度

提供素材がよくてテンション上がる度

〇おすすめポイント

素材が良くてモチベがあがります。

×よくないポイント

動画解説前提なので図版が小さいのが玉に瑕

おすすめ記事

 

プロフィール

マケイヌ

人生のメインストリームから外れた40代の♂。

90年代オルタナにはまり、文字通りメインストリームから逸脱。 その後もたびたび人生から逃亡。

心が動いた作品の紹介や 自分のちいさな経験、HowToを発信できればと日々模索中。

1年後までにイラストと写真のポートフォリオをつくりたい。

記:2019年12月

▼プロフィールはこちら

Follow me

アーカイヴ