Unityに関連する記事です

 すでに実装済のジャンプの処理にジャンプのアニメーションを同期させる機能を実装します。


<実装動画 ジャンプアニメなし>
動画ファイルへのリンク

<実装動画 ジャンプアニメあり>
動画ファイルへのリンク



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

手順11 ージャンプ処理とジャンプアニメーションの同期ー
・ジャンプアニメーションの遷移設定
・PlayerAnimation スクリプトの修正
・PlayerJump スクリプトの修正



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

 ・Any State を利用したステートの遷移処理の実装例



1.設計


 前回の手順では移動の処理と移動のアニメーションの同期を実装しました。
同じようにジャンプについても、ジャンプの処理とアニメーションの同期を行うようにします。

 移動のときと同じように、Animator ビューを開いて、そちらにジャンプ用のアニメーションをステートして設定し、トランジションの設定を行います。
 
 アニメの制御処理については PlayerAnimation スクリプトにまとめて書いています。
ジャンプも同じように PlayerAnimation スクリプトから制御命令を出して実行します。
このとき、移動や待機のアニメーションからのジャンプのアニメーションの遷移は Trigger 型を利用して遷移を実行します。

 ただし、この Trigger 型の命令についての処理は、まだ PlayerAnimation スクリプトには書いてありません
代わりに TODO という形で実装予定の部分を記述してあります。この部分を実装していきます。

 このように今後実装したい機能などがある場合には、前もって日本語のコメントで TODO を残しておくとよいでしょう。

 ジャンプの機能は PlayerJump クラスに作成してありますが、
ジャンプに合わせてジャンプのアニメーションの同期をさせる処理はまだ作ってありません
こちらも TODO を用意していますので、そちらの部分の実装を行っていきます。



 複数のクラスをまたがって処理を作っていく場合には、両方の処理の繋がりをイメージして処理を作っていく必要があります。

 今回であれば、以下のような処理の流れになります。

<PlayerJump クラス>
 ・PlayerJump クラスでジャンプの処理を実行する。
  このクラスの中で PlayerAnimation クラスに用意するジャンプのアニメーションの同期を行うメソッドを実行する。

    ↓

<PlayerAnimation クラス>
 ・Animator を利用してジャンプのアニメーション遷移を行い、ジャンプの機能とアニメーションの同期を行う。

 このような順番で処理が動きます。

 命令を受ける側(PlayerAnimation クラス)の処理を作っておかないと、命令を実行する(出す)側(PlayerJump クラス)は処理が作れません。

 そのため、処理を作っていく際には、作りたい機能全体の流れを設計し、それを、ゴール地点(命令を受ける側)から作っていくようにするとつくりやすいです。

 この教材ではすべてそのような設計をベースに、命令を受ける側から作っています。
設計の学習は非常に大切ですので、もう一度、見直してみるとよいでしょう。


2.Animator ビューでジャンプのアニメーションの設定を行う

1.Animatorビューにジャンプのアニメーションクリップを登録する


 ヒエラルキーでプレイヤー用のゲームオブジェクトを選択した状態で、Sceneビューから Animatorビューに切り替えてください。
プレイヤー用のゲームオブジェクトの Animator にセットされている AnimationController の情報が表示されます。


Animatorビュー



 Animatorビューに表示されない場合には、プレイヤー用のゲームオブジェクトが選択されていない状態ですので
ヒエラルキーにあるプレイヤー用のゲームオブジェクトを選択してから、タブを Animatorビューに切り替えてください。



 UnityChan アセットにはジャンプ用のアニメーションクリップが用意されていますので、この教材ではそちらを利用します。
何種類かありますので、任意のものを選択してください。他のアセットのものでも問題ありません。


パス
Assets/UnityChan/Animations/unitychan_JUMP00.fbx


フォルダ



インスペクター画像




 選択したジャンプのアニメーションクリップのファイルを、Animatorビューへドラッグアンドドロップしてください。
新しくファイル名と同名のステートが1つ追加されます。名前を Jump に変更しておいてください。


ステート

 

インスペクター画像(名前を変える)




2.Parameters にジャンプ用の Parameter を追加する


 Animatorビューの左側にある Parameters に、新しい条件を1つ登録し、ジャンプのアニメーション遷移の条件として設定出来るようにします。

 Parameters の右側にあるプラスボタンを押して、Trigger 型の条件を1つ追加します。Jump という名前にしてください。
このとき、最後に空白などが入らないように注意してください。

 Trigger 型の場合、名前の右側に 丸いアイコンが表示されます。


Parameters





3.トランジションの設定を行う


 各ステートにトランジションの設定を行います。

 今回は新しく AnyStateExit という Unity が用意しているステートを利用します。


参考サイト
Unity 公式マニュアル
アニメーションステート
えきふるゲームラボ 様
AnyStateを使ってアニメーション遷移をスッキリ!詳細解説!



 AnyState というステートを選択し、右クリックをしてメニューの中から Make Transition を選択します。
白い矢印が AnyState から表示されますので、Jump ステートへつなげて左クリックを押します。

 同様に Jump から Exit にもつなげます。

 下記のように AnyState → JumpJump → Exit にトランジションを設定してください。
処理の流れを把握しやすいように、下記の画像のように、トランジションに沿った配置してください。





4.各トランジションの Conditions の設定を行う


 作成したパラメータを使って、それぞれの遷移と条件を設定していきます。

 まず AnyState → Jump のトランジションを選択してください。矢印が青くなります。
この状態にし、インスペクターから遷移条件を設定します。


AnyState → Jump



 Has Exit Time のチェックを外してください
Consitions には プラスボタンを押して、Jump パラメータを設定してください。


インスペクター画像




Jump → Exit



 こちらの Conditions は設定不要です。
下記の画像を参考に、インスペクターの確認だけしてください。


インスペクター画像



 以上で完成です。


Animatorビュー 全体図




 こちらでも解説していますので、併せて確認してください。

   => AnyStateを利用したAnimatorControllerの設定方法


3.PlayerAnimation スクリプトを修正する


 TODO に書いてある Trigger の命令を実行するためのメソッドを作成します。

 今までの処理などを参考にして、自分で考えて処理を書いてみるチャレンジをしてみてください。


PlayerAnimation.cs

 ← クリックすると開きます



4.<Animator.SetTrigger() メソッド>


 Unityのアニメーションは、Animatorクラスによって様々なアニメーションの制御が行えます。

Unity公式スクリプトリファレンス
Animator




 今回はアニメーションの遷移のために SetTriggerを利用し、遷移の条件をこのメソッドの引数に指定してアニメーションの遷移を行っています。

 各メソッドの引数にはそれぞれ型の指定が異なりますが、いずれも第1引数は string 型です。この部分には、パラメータで設定した文字列を指定します。
文字列ですので大文字小文字は区別されます。パラメータに登録した文字列をこの第1引数に指定することでパラメータのもつ情報を変更することが出来ます。

  // Trigger パラメータのアニメの再生
  anim.SetTrigger(nextAnimState.ToString());

 こうすることで、このパラメータの値をスクリプトから書き換えることができます。その結果として、条件が合致したアニメーションに遷移することが出来ます。



 今回は第1引数について文字列での直接記述(リテラル表記)ではなく、
enum の PlayerAnimationState 型を指定し、それを ToString メソッドを利用して string 型にキャストしています。
このようにすることで、文字列を直接書き込んで打ち間違えをしてしまう、エラーの可能性を排除しています。

<今回の実装例>
  anim.SetTrigger(nextAnimState.ToString());

<参考サイト>
Unity公式スクリプトリファレンス
SetTrigger



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


 ジャンプ機能の処理にアニメの同期機能を追加して、ジャンプ時に、ジャンプのアニメーションを再生するようにします。

 こちらも処理については、TODO を記述してある部分を実装します。
今後も、追加していきたい処理がある場合には、日本語で TODO を残しておくようにすると、処理の書き洩らしを防げます。

 アニメーションについては PlayerAnimation クラスがアニメーションの遷移制御を担当しています。
先ほど、PlayerAnimation クラスにメソッドを追加しましたので、そちらに対して命令を出せるように、新しい変数をメンバ変数として追加します。

 メンバ変数を追加する場合、アクセス修飾子が同じレベルのものでまとめて記述しておくと読みやすくなります。


PlayerJump.cs

 ← クリックすると開きます



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


 Animator ビューを利用して AnimationController に設定したジャンプのアニメーション遷移機能を2つのクラスを使って実現をしています。
どのように処理がつながっているのかを、1つのクラスだけではなくて、両方のクラスを見直しておきましょう。

 デバッグをする際には、どのように処理が動くのかを想定してからゲームを実行していくように心がけてください。
教材では「正解」「間違い」を提示していますが、実際に自分が一人で作るゲームでは誰も正解は教えてくれません。
そのため、今から一人で判断がつけられるように準備していきましょう。


<実装動画 
動画ファイルへのリンク


<実装動画◆
動画ファイルへのリンク



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

 => 次は 手順12 ーポストプロセッシングの実装− です。

コメントをかく


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

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

Menu



技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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