Unityに関連する記事です

 前回に引き続き、キャラモデルの演出を追加します。
この手順ではキャラモデルの各アクションに対してのアニメーションの制御を実装します。


<実装動画 バレット生成(攻撃)時>
動画ファイルへのリンク


<実装動画 被ダメージ時>
動画ファイルへのリンク


<実装動画 ゲームオーバー時>
動画ファイルへのリンク


 以下の内容で順番に実装を進めていきます。


拡張4 −キャラモデルのアニメーションの追加−
 7.キャラモデルのアニメーションを設定する
 8.キャラモデルのアニメーションを管理するスクリプトを作成し、アニメーションが遷移する処理を呼び出したいスクリプト内に適宜な部分に追加する



 新しい学習内容は、以下の通りです。

 ・Any State を利用したステートの遷移処理の実装例
 ・Animator.ResetTrigger メソッド



7.キャラモデルのアニメーションを設定する

1.設計


 各アクションに対しての制御は Animator の機能を利用し、Animator のパラメータを利用して制御を行っています。

 アニメーションの遷移処理はスクリプトを通じて制御することができますが、そのためには事前に、Animator ビューにおいて、
アニメーションのステートを登録し、パラメータを作成して、各ステート間の遷移条件を設定しなければなりません

 ステート間の遷移については Any State を利用します。この機能を利用することで煩雑になりがちなステート間の遷移処理を簡潔にまとめることが可能です。


2.Animator ビューにてアニメーションの設定を行う


 Little_Cat_Girl ゲームオブジェクトの子オブジェクトである Little_Cat_GirlRig ゲームオブジェクトを確認してください。
Animator コンポーネントがアタッチされていると思います。

 Animator コンポーネントの Controller プロパティ欄にはデフォルト情報として、Little_Cat_GirlRig コントローラーがアサインされてますので、
こちらのコントローラーを編集して設定を行います。この情報が Animator ビューに表示されます。


Little_Cat_GirlRig ゲームオブジェクト インスペクター画像




 Animator ビュータブを押して Animatorビューを表示してください。
Animatorビュー タブがない場合には、Unity Editor の左上のメニューより、Window => Animation => Animator で表示することが出来ます。

 ヒエラルキーの Little_Cat_GirlRig ゲームオブジェクトを選択することで、Animatorビュー にコントローラーの情報が表示されます。
最初からすべての AnimationClip がステートとして登録されていますので、下記の画像のようにトランジションを設定してください。
この画像にないステートは今回は利用しませんので、削除してもいいですし、Animator ビューの端側にまとめておいても構いません。


Animator ビューの設定


 
 Entry のトランジションを Idle になるようにして、他のトランジションへの遷移を止めておきます
また、AnyState を活用しますので、AnyState を起点として各ステートへの遷移を作成してください

 AnyState では、現在のステートがどこであるかは問わず、新しい遷移の条件が実行された時点で AnyState から遷移が実行されます。
そのため、各ステート間を逐一トランジションでつなぐ必要が亡くなります。



 つづいてパラメータを作成します。Trigger 型の attack と hitbool 型の down の3つを用意してください。
各パラメータの右側にあるアイコンの形でパラメータの型を判断できます。(○は Trigger型、□は Bool 型です。)


パラメータ画像


 パラメータを作成したら、トランジションにパラメータを設定してスクリプトから制御を行えるようにします。



 各ステートに対して、トランジションと遷移条件を設定します。
各設定については、下記のインスペクター画像をまとめておきますので参考にしてください。


AnyState => attack



インスペクター画像



attack => Exit




AnyState => get_hit



インスペクター画像



get_hit => Exit




AnyState => die



インスペクター画像



die => Exit



 以上で設定は完了です。どのトランジションがどの条件で遷移するかを確認しておいてください。


8.キャラモデルのアニメーションを管理するスクリプトを作成し、アニメーションが遷移する処理を呼び出したいスクリプト内に適宜な部分に追加する

1.設計


 どのスクリプトにどのような処理を追加すればよいか、ロジックを含めて考えてみましょう。
処理のゴール地点とスタート地点、繋がりをどのように構築すればよいか、など、今までの処理の実装例を思い出してみてください。


2.CharaAnimationController スクリプトを作成する


 Animator コンポーネントを利用して、Animator ビューにて設定を行ったステート間の遷移を実装します。
ロジックとしては、ステート単位で実行用のメソッドを用意せずに、Animator の実行命令を記述したメソッドを用意しておいて、
引数で受け取った情報を利用して汎用的に遷移が行える設計にしています。

 例えば、attack のパラメータの情報を引数で受け取った場合には attack のアニメーションを再生し、
hit のパラメータの情報を引数で受け取った場合には、同じメソッドではありますが、今度は hit のアニメーションを再生するような設計になっています。

 今回のケースでは、パラメータの情報については、static 修飾子付きの string 変数で宣言して値としてパラメータの文字列を代入しておくことで、
外部のスクリプトで引数としてパラメータの値を指定する際に、その都度文字列を入力するのではなく、これらの変数を利用します。

 文字列を直接スクリプト内に入力するとエラーを生みやすいので、可能であれば出来るだけ、enum や、string 型の変数を利用して値を代入しておくことで問題を未然に回避出来ます。
特に文字列はコンパイル時のエラーにひっかからないため、見つけにくいという問題もあります。(変数は書き間違えるとエラーが出ますが、文字列は出ません。)

 なるべく問題が発生しにくい処理の設計や記述を心がけることで、処理全体も見やすくなりますし、記述の精度が上がります


CharaAnimationController.cs

<= クリックすると開きます


 スクリプトを作成したらセーブします。


3.<Animator.ResetTrigger メソッド>


 引数に指定した Trigger 型のパラメータで実行されているステートの処理をリセットして停止するメソッドです。

  animPlayer.ResetTrigger(attackParameter);
  animPlayer.SetTrigger(playAnimationParameter);

 今回のケースでは、attackParameter 変数内で指定している文字列("attack")の情報で動いている Trigger 型のステートを停止します。
そのため、Trigger 型の attack のパラメータを利用して制御されている attack ステートの処理が停止されます。

 そののちに、SetTrigger メソッドで新しいアニメーションが実行されるようになっています。


参考サイト
Unity公式スクリプトリファレンス
Animator.ResetTrigger
https://docs.unity3d.com/ja/current/ScriptReferenc...


4.Little_Cat_Girl ゲームオブジェクトに CharaAnimationController スクリプトをアタッチして設定を行う


 ヒエラルキーにある Little_Cat_Girl ゲームオブジェクトに、作成した CharaAnimationController スクリプトをドラッグアンドドロップしてアタッチしてください。
インスペクターを確認してアタッチが正常に行われているかをチェックした上で、animPlayer 変数に必要な情報をアサインします。

 スクリプトより操作を行いたい Animator コンポーネントをアサインすることになりますので、Little_Cat_GirlRig ゲームオブジェクトをドラッグアンドドロップしてアサインしてください。
自動的に、Animator コンポーネントの情報がアサインされます。これでこのコンポーネントを操作する準備が整いました。


Little_Cat_Girl ゲームオブジェクト インスペクター画像



 以上で設定は完了です。


5.PlayerController スクリプトを修正する




PlayerController.cs

 <= クリックすると開きます。


 スクリプトを修正したらセーブします。



 ヒエラルキーにある PlayerSet ゲームオブジェクトのインスペクターを確認してください。
新しく宣言した変数が表示されていますので、対象となるゲームオブジェクトをドラッグアンドドロップしてアサインしてください。


PlayerSet ゲームオブジェクト インスペクター画像



 以上で設定は完了です。


6.DefenseBase スクリプトを修正する




DefenseBase.cs

 <= クリックすると開きます


 スクリプトを修正したらセーブします。


7.ゲームを実行して動作を確認する


 実装する内容を確認し、デバッグが必要な部分を理解した上で処理を実行してください。
何か所かデバッグを行う必要がありますので、それを自分で1つずつ確認していってみましょう。


<実装動画 バレット生成(攻撃)時>
動画ファイルへのリンク


<実装動画 被ダメージ時>
動画ファイルへのリンク


<実装動画 ゲームオーバー時>
動画ファイルへのリンク


 以上でこの手順は終了です。

 次は  です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます