i-school - 3Dダイビングゲーム 手順21
 この手順では姿勢変更に合わせてキャラのアニメーションを変更する演出を追加します。

 伏せの状態になった際にアニメーションを変更し、バタバタとがんばって伏せの状態を維持しているように演出します。

<完成動画>
https://gyazo.com/d3eec27ebb77885e01c69e289362f6d9


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

手順21 −キャラのアニメ制御の同期を追加−
34.Animatorビューを操作してキャラのアニメーション制御を追加する
35.スクリプトを使って、キャラの姿勢とアニメーションを同期させる



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

 ・アニメーション関連(Animatorビュー、アニメーションのステート、トランジション、パラメータ)
 ・Animator.SetBoolメソッド



34.Animatorビューを操作してキャラのアニメーション制御を追加する

1.設計


 Unityにおいてアニメーションの切り替えは Animator ビューを利用して設定を行います。


Animatorビュー画像



 現在使用しているペンギンのキャラにはあらかじめいくつかのアニメーションが用意されていますが、
利用したいアニメーションとアニメーションとの遷移(切り替え処理のこと。トランジションといいます)の設定がありません。
Animatorビューで遷移の処理を設定しておくことにより、スクリプトから命令を出すことでアニメーションの遷移処理を制御することが出来るようになります。

 アニメーションを遷移させるには遷移のための条件を設定します。その条件を満たした場合に、アニメーションが遷移します。
これは Animatorビューでは矢印で表示され、矢印通しをつないでいくことで、アニメーション遷移を設定することが出来ます。


2.Animatorビュー


 Unityの左上にあるメニューの中から Window => Animation => Animator を選択してください。
SceneビューやGameビューのような Animatorビューがエディターのレイアウト内に追加されます。


Animatorビュー画像



 アニメーションの切り替えの設定は、このAnimatorビューの中で行います。
ただしアニメーション遷移の設定を行うためには、対象となるゲームオブジェクトをヒエラルキーで選択している必要があります。

 ヒエラルキーにある Penguinゲームオブジェクトを選択した状態にしてください。(インスペクターに表示されている状態)
この状態になると、Penguin ゲームオブジェクトにアタッチされている、Animator コンポーネントに登録されているAnimatorの情報がAnimatorビューに表示されます。


 Animatorビューの操作ですが、マウスのホイールボタンを押しながらマウスを移動させることによって、Animatorビューの中を移動できます。
またホイールをスクロールさせるとズームインとズームアウトを行うことが出来ます。


<手順動画 Animatorビュー内の移動>
https://gyazo.com/a64b0215bb089304729c9cf30d3f2339


3.アニメーションのステートとアニメーションクリップ


 Animator ビューの中では、様々なアイコンがあります。これをアニメーションのステート(State)といいます。
アニメーションのステートには、Unityが機能として用意してあるものと、ゲームオブジェクト固有のものがあります。

 Entry というステートと、idle という名前のステートが矢印でつながっていると思います。
Entry はゲームが開始されると一番最初に実行されるステートで、矢印でつながっているステートへ自動的に遷移します。

 現在は idle のステートにつながっていますので、ゲームが実行されると idle のステートに登録されているアニメーションクリップが再生されます。
ステートを選択すると、インスペクターにこのステートの情報が表示されます。

 ステートには1つのアニメーションクリップの情報が登録されています。ステートをダブルクリックするとインスペクターに表示されます。
アニメーションクリップが登録されているのは Motionという部分です。
idleのアニメーションクリップには、idle という名前のアニメーションクリップが登録されています。


idle ステートのインスペクター画像



idle アニメーションクリップ



 今回はこの idel ステートと stan ステートの2つを利用します。

 直滑降の状態には今まで通り idle ステートを再生し、伏せの状態になったら stan ステートにアニメーションを遷移(せんい)するようにします。
また伏せから直滑降の状態に戻ったら、再度 idle ステートのアニメーションに遷移するようにします。


stan ステートのインスペクター画像



 stan のアニメーションクリップの設定に、LoopTime という設定があります。もしもチェックが入ってなければチェックを入れておいてください
ここにチェックがある場合、同じアニメーションクリップの再生をループ再生するようになります。


4.Animatorビューの Parameters で遷移条件を作成する


 それでは idle ステートと stan ステートの遷移設定を行います。

 Entry ステートの場合は、ゲームの開始と同時に無条件でアニメーションの遷移が発生しますが、それ以外のアニメーションは
基本的には遷移するための条件を設定し、その条件に合致したときだけアニメーションの遷移(切り替え)を発生させるように設計します。

 
 今回は姿勢変更部分を条件として利用しますので、まずは、条件用のパラメータを設定します。

 パラメータとはアニメーションの再生の状態を設定するものです。4つの種類があり、今回は bool型を新しく作成します。
Animatorビューのすぐ下に Parameters という項目がありますので、その中にあるプラスボタンを選択し、bool を選択してください。


Parameters



 Parametersの中に新しいパラメータが作成されますので、名前を Prone に変更してください。bool型の場合、名前の右側に四角いアイコンが表示されます。


<手順動画 新しいパラメータを追加する>
https://gyazo.com/a0b2545d5c65421ed2dc4c1abdafd73b


Parametersに Prone パラメータを追加した後の画像



5.アニメーションのステートとステートをつなげる遷移条件の設定を行う


 アニメーションの遷移用の条件が用意できました。次は、この条件をアニメーションの遷移の中に設定していきます。

 idle ステートから stan ステートへと伸びている矢印をクリックしてください。


idle => stan トランジション Animatorビュー画像


 
 矢印をトランジションといいます。この作成されたトランジションを左クリックで選択すると、画像のように矢印が青くなり、選択されている状態になります。
またインスペクターに、トランジションの情報が表示されます。


idle => stan トランジション インスペクター画像



 Conditions という項目があり、ここにアニメーションとアニメーションの遷移条件を設定することが出来ます。
Conditionsの右下にあるプラスボタンを押してください。上に項目が追加されて、先ほど作成したパラメータを選択出来るようになります。

 Prone を選択して、その横の条件を true に設定してください。
この条件では、bool 型の命令で Prone が実行されたとき、その値が true であった場合には、ステートを idle => stan に遷移させるというものです。
ここに条件を設定しておくことで、スクリプトから遷移命令を出してアニメーションを遷移させることが出来るようになります。

 また Has Exit Time という項目がありますので、そちらのチェックを外しておいてください



 続いて反対に、stan ステートから idle ステートへと伸びている矢印をクリックしてください。


stan => idle トランジション Animatorビュー画像



 このトランジションを左クリックで選択すると、インスペクターに遷移情報が表示されます。

 Conditions の項目に、先ほどと同じようにパラメータの条件を設定します。
Conditionsの右下にあるプラスボタンを押してください。上に項目が追加されて、先ほど作成したパラメータを選択出来るようになります。

 Prone を選択して、その横の条件を false と設定してください。
この条件では、bool 型の命令で Prone が実行されたとき、その値が false であった場合には、ステートを stan => idle に遷移させるというものです。
こちらも先ほどと同様で、ここに条件を設定しておくことで、スクリプトから遷移命令を出してアニメーションを遷移させることが出来るようになります。


stan => idle トランジション インスペクター画像



 以上で Animatorビューとステート遷移の設定は完了です。
次の手順で、PlayerController スクリプトからこのステート遷移の命令を出せるように処理を追加します。


35.スクリプトを使って、キャラの姿勢とアニメーションを同期させる

1.設計


 Animator コンポーネントの持つメソッドを利用することで、Animator ビューに設定したステート間の遷移が可能になります。
今回は idle と stan の2つのステートを姿勢の変更に合わせて、行ったり来たりするように制御します。

 ステートの遷移条件用に bool 型の条件を設定していますので、アニメーションを制御する命令も bool 型で命令します。
他にも色々なステートが Animator には登録されていますが、今回はそれらは利用していません。

 そのためスクリプトに Animator コンポーネントを操作できるように Animator 型の変数を用意し、それを利用してアニメーションを遷移させます。
遷移させるタイミングはどこになるでしょうか。ロジックを考えながら実装をしてみてください。


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


 アニメーションの遷移が完成しましたので、この遷移をスクリプトから切り替えるように処理を追加します。

 最初に宣言フィールドで Animator 型の anim 変数を追加します。この情報を使うことでアニメーションの遷移の命令を実行することが出来るようになります。
Startメソッドを修正して、GetComponentメソッドを利用して anim 変数に Penguin ゲームオブジェクトにアタッチされている Animator コンポーネントを取得する処理を追加します。

 アニメーションの制御命令は、Animatorクラスの持つ、SetBoolメソッドを利用することで実行します。
このSet〜の部分が、先ほどの条件のパラメータで設定した情報と同じものを利用します。
 こちらを姿勢変更のタイミングで実行して、姿勢に応じたアニメーションに遷移するように制御を行います。


PlayerController.cs

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





 スクリプトの修正が終了したら、ヒエラルキーにある Penguin ゲームオブジェクトのインスペクターを確認します。
インスペクター上に新しく表示される変数はありませんので、アサインが外れているものがないかを確認してください。

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



3.<Animator.SetBoolメソッド>


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

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

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

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

  // 伏せの状態に遷移するための条件を指定する  => idle から stan のアニメーションに遷移する
  anim.SetBool("Prone", true);


  // 伏せの状態を止めるための遷移の条件を指定する => stan から idle に遷移する
  anim.SetBool("Prone", false);

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


パラメータとSet〜メソッドの関連性



<実行動画 スクリプトからパラメータの値を変更し、条件を満たしたアニメーションを遷移させる>
https://gyazo.com/faedc20577029997b12cf44479da64dd


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


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


 すべて完成しましたので、ゲームを実行して姿勢の変更を行ってみましょう。姿勢に応じたアニメーションが再生されれば制御成功です。
一緒に Animator ビューで遷移していることを確認しましょう。現在再生されているステート、Parameter が確認できます。


<実行動画>
https://gyazo.com/d3eec27ebb77885e01c69e289362f6d9


<実行動画 Animatorビューの確認>
https://gyazo.com/1f2930b199be30938313654d2507d8e0


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

 今回はアニメーションクリップの中身やトランジションの詳細な設定や説明は省略しています。
この部分は今後も必ず利用する機能ですので、是非、自分で調べて理解を深めておいてください。


 => 次は 手順22 −カメラのぼかし演出− です。