i-school - 3Dトップビューアクション 手順14
 以下の内容で順番に実装を進めていきます。

手順14 ー攻撃用のアニメーション遷移設定ー
 Animator 関連の機能と設定の復習



1.攻撃用のアニメーションのインポートを行う


 3Dモデルのアセットに攻撃用のアニメーションが用意されていない場合には、アセットストアから無料のアニメーション用のアセットを探してインポートしてください。
 
 この教材では次のアセットを利用しています。


Unity アセットストア
Warrior Pack Bundle 1 FREE
https://assetstore.unity.com/packages/3d/animation...






2.Animator ビューにて攻撃アニメーションを設定する

1.Animator ビューを表示する


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


Animatorビュー(参考画像。この状態で表示される訳ではありません)



2.Animator ビューに、設定したい AnimatorController の情報を表示する


 Animator ビューが Unity エディター内に追加されていると思います。
ただし、先ほどもお伝えしたように、この Animator ビューは選択している AnimatorController の情報のみが表示されますので、
実際に自分が設定や編集を行いたい AnimatorController を、都度、選択し、Animator ビューに表示させる必要があります。

 プレイヤー用のゲームオブジェクトにアサインした Animator コンポーネント内の AnimatorController の部分をダブルクリックしてください。
そうすることで Animator ビューを再度表示し、編集する画面に移動できます。覚えておくとよい操作の1つです。

 アニメーションの切り替えの設定は、このAnimatorビューの中で行います

 Animator ビューではすべての AnimatorController の設定を行います。
そのため、設定したいファイルを選択して、表示内容を切り替えて作業を行います。

 AnimatorController の設定を行いたい場合、対象となる AnimatorController ファイル自体か、
その AnimatorController がアサインされているゲームオブジェクトのいずれかを選択している必要があります。

 今回であれば、ヒエラルキーにあるプレイヤー用のゲームオブジェクトを選択した状態にしてください。(インスペクターに表示されている状態)
この状態になると、ゲームオブジェクトにアタッチされている、Animator コンポーネント内にある、Controller プロパティの情報が Animator ビュー に表示されます。


Animator コンポーネント



 もしも Animator ビューに、設定したい AnimatorController の内容が表示されない場合には、
このように AnimatorController がアサインされているゲームオブジェクトを選択してください。


 続いて、Animator ビューを利用し、アニメーションの各種設定を行います。


3.攻撃用の AnimationClip を Animator ビュー内に配置し、ステートに設定する


 1つ1つのアニメーションの情報は、Animation Clip というファイルが管理しています。
例えばジャンプのアニメ、移動のアニメ、という風に、アクションの状態ごとに AnimationClip ファイルがあります。
この情報を AnimatorController ファイル内の State という部品に割り当てることによって、再生するアニメーションの設定が行えます。

 任意の攻撃用の Animation Clip ファイルを選択し、Animator ビュー内にドラッグアンドドロップしてください。

 この教材では下記のファイルを利用しています。


パス
Assets/ExplosiveLLC/Warrior Pack Bundle 2 FREE/2 Handed Warrior Mecanim Animation Pack/Animations/2Handed@Attack1.FBX


<フォルダ内の AnimationClip ファイル>



<インスペクター>




4.ステート内の Motion(AnimationClip)を確認する


 ステートには1つだけ、AnimationClip をアサインして登録することができます。
つまり、1つのステートにつき、1つのアニメーションを登録することが出来るようになっています。
 
 AnimationClip をアサインする場所は、ステート内の Motion 項目になります。
すでに最初からアサインされていますので、ここでは確認をおこなってください。
アサインされている AnimationClip ファイルをクリックすると、どのファイルが紐づいているのか、確認できます。

 今回利用するステートに選択し、インスペクターの内容が下記のようになっていることを確認してください。
もしも Motion 部分のアサインが抜けてしまっている場合には、この画像のようになるように、AnimationClip ファイルをアサインしてください。


Attack0



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


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


 先ほど確認していただいたように、アニメーションのファイルである AnimationClip ですが、
こちらは ステート という情報内の Motion 項目に1つだけ登録することが出来ます。

 そのため、アニメーションの切り替えとは、各ステート間を切り替え(遷移)して、アニメの切り替えを行っています。

 この機能を実現するため、ステートには遷移するための条件を設定しておくことが出来ます。(無条件も可能です)
例えば、どういった状態になったときに、このアニメの再生をしてほしい、という情報を Animator ビュー内で事前に登録しておくことにより、
その条件式をスクリプト内で制御し、アニメーションの再生と同期させることが出来るようになっています。



 今回は、キャラの移動のキー入力に合わせて、移動用のアニメーションと待機用のアニメーションの再生を制御する設計にしますので、
キー入力に合わせて 数値の情報を条件式として用意するようにします。キー入力があるときにはこの数値が上がり、ないときにはこの数値を 0 にします。

 こういった条件式を作成するために、AnimatorController には Parameter(パラメータ) が用意されています。

 パラメータとは、アニメーションの切り替え用の変数のようなものです。
データ型と名前とをセットで作成することが出来ます。

 このパラメータを作成しておくことで、各ステートの切り替え条件として Parameters を設定することが出来ます。



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

 Trigger を選択すると、Parameters の中に新しいパラメータが作成されますので、名前を Attack に変更してください。
なお、Trigger 型の場合、Attack という名前の右側に〇印が表示されます。(この部分が型によって変化し、種類の特定が容易になっています)


Parametersにパラメータを追加した後の画像(並び順は順不同です)




 この Parameters の値をスクリプトで制御して、ステートを切り替え、アニメーションの切り替えを行います。

 ただし、Parameters はあくまでも条件を作成するための変数のようなものです。
この値を利用した条件式を、次の手順のトランジションに設定する必要があります。


3.ステート間のトランジションの設定を行う

1.Idle → Attack0 ステートへのトランジションの設定を行う


 Idle ステートから Attack0 ステートへと伸びているトランジション(矢印)をクリックしてください。
このトランジションがない場合、Idle ステートを選択した状態で右クリックをしてメニューを開き、Make Transiton を選択してください。
Idle ステートを始点とした矢印が表示されますので、これを Attack0 ステートに矢印を繋げて左クリックして決定してください

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


Idle ステートから Attack0 ステートへのトランジションの選択(青い矢印が選択しているトランジション)




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

 Attack を選択して設定してください。(すでに設定済である場合は確認してください)
Attack を選択すると、このパラメータが Trigger 型であるため、値の設定は不要です。

 この条件では、スクリプトから Trigger 型の命令で "Attack" が実行されたとき、ステートを idle => Attack0 に遷移させるというものです。
遷移の条件は不要のため、命令がきたら実行されます。


Conditions にパラメータの条件を設定




 また Has Exit Time という項目がありますので、そちらのチェックを外しておいてください
このチェックが外れている場合、遷移前のアニメーションが再生され終わるのを待たずに、遷移先のアニメーションを割り込ませて再生させることが出来ます。
つまり、待機状態から攻撃状態への遷移命令が来たら、待機アニメーションの途中であってもそのアニメーションを中断して、攻撃のアニメーションが再生されます。

 Has Exit Time のチェックが外れていない場合には、遷移前のアニメーションが再生されるのを待ってから、遷移先のアニメーションが再生されます
そのため、スクリプトから移動アニメーションへの遷移命令が来ても、待機アニメーションを再生してから攻撃のアニメーションが再生されるため、
移動の処理とアニメーションの再生処理がずれてしまい、挙動がちぐはぐになります



 最後に Settings 内にある TransitionDuration の値も 0.02 前後に調整してください。
この値を調整すると、すぐ下にあるゲージも一緒に動きます。ゲージを直接ドラッグアンドドロップで操作も出来ます。

 TransitionDuration の値が小さいほど、前のアニメーションから素早く遷移が発生します。


TransitionDuration



 いずれの項目についても、実際にどのような違いがあるか、文章だけではなく実際に自分でチェックのある、なしの両方で確認して学習しておきましょう



 トランジション表示中のインスペクターの下部には Preview ウインドウがあり、その中には再生ボタンがあります。
再生ボタンを押すことでどのようなアニメーションを再生するか、実際のモデルとなるゲームオブジェクト(今回は Unitychan)で確認できます。


Preview ビュー



 ここに Unitychan のモデルが表示されていない場合には再生を実行できません
その場合には、ヒエラルキーにある、再生したい対象のゲームオブジェクトを Preview ウインドウに対してドラッグ&ドロップしてください。
この手順を行うことで、Preview ウインドウにモデルが設定され、再生ボタンが押せるようになります。


2.Attack0 → Idle ステートへのトランジションの設定を行う


 先ほどとは逆に、今度は Attack0 ステートから Idle ステートへのトランジションを選択してください。
このトランジションがない場合には、先ほどと同じように新しくトランジションを作成してください。


Attack0 ステートから Idle ステートへのトランジションの選択(青い矢印が選択しているトランジション)



 こちらの Conditions にパラメータは設定不要です。

 Trigger 型のステートの場合、アニメの再生が終了したら自動的に次のステートへと遷移します。
その際、条件の設定がないステートがある場合、そのステートへと遷移します。

 そのため、このトランジションの Conditions には何も設定しないことで、攻撃のアニメが終了したら
自動的に待機のアニメの再生に遷移するようにしています。



 こちらの Has Exit Time チェックは、入れたままにしておいてください
理由は先ほどの設定と逆に、攻撃のアニメーションが再生されて、終わるのを待ってから、待機のアニメーションを再生したいためです。
そのように設定しておかないと、こちらもちぐはぐなアニメの遷移になってしまいます。
 

3.Locomotion → Attack0 ステートへのトランジションの設定を行う


 Locomotion ステートから Attack0 ステートへと伸びているトランジション(矢印)をクリックしてください。
このトランジションがない場合、Locomotion ステートを選択した状態で右クリックをしてメニューを開き、Make Transiton を選択してください。
Locomotion ステートを始点とした矢印が表示されますので、これを Attack0 ステートに矢印を繋げて左クリックして決定してください

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


Locomotion ステートから Attack0 ステートへのトランジションの選択(青い矢印が選択しているトランジション)




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

 Attack を選択して設定してください。(すでに設定済である場合は確認してください)
Attack を選択すると、このパラメータが Trigger 型であるため、値の設定は不要です。

 この条件では、スクリプトから Trigger 型の命令で "Attack" が実行されたとき、ステートを Locomotion => Attack0 に遷移させるというものです。
遷移の条件は不要のため、命令がきたら実行されます。


Conditions にパラメータの条件を設定




 また Has Exit Time という項目がありますので、そちらのチェックを外しておいてください
このチェックが外れている場合、遷移前のアニメーションが再生され終わるのを待たずに、遷移先のアニメーションを割り込ませて再生させることが出来ます。
つまり、移動状態から攻撃状態への遷移命令が来たら、待機アニメーションの途中であってもそのアニメーションを中断して、攻撃のアニメーションが再生されます。



 最後に Settings 内にある TransitionDuration の値も 0.02 前後に調整してください。
この値を調整すると、すぐ下にあるゲージも一緒に動きます。ゲージを直接ドラッグアンドドロップで操作も出来ます。

 TransitionDuration の値が小さいほど、前のアニメーションから素早く遷移が発生します。


TransitionDuration




 以上でトランジションの設定は完了です。


完成図



 以上で Animator ビューでの設定は完了です。

 Animator ビュー、および、トランジションなどの設定は難しく、慣れが必要です。
何回も繰り返し設定をしながら覚えていくようにしてください。



 => 次は 手順15 −アニメーションイベントを利用した攻撃処理の実装− です。