AnimatorControllerを使ってコンボ攻撃する方法

そうだ、コンボ攻撃をしよう。

この動画では、コンボ攻撃でよくあるような「連続攻撃」「ボタンに応じた攻撃の分岐」それと「攻撃のアシスト」を作る方法を紹介します。

イントロダクション

この動画ではアニメーターコントローラーを使用してコンボ攻撃を実現する方法を紹介します。
今回やることは以下の3つです。

  • ボタンをタイミング良く押して連続攻撃
  • 押すボタンの組み合わせに応じたコンボ攻撃
  • その攻撃を当てやすくするアシスト機能

まずは移動するだけのキャラクターを用意しました。最初にやることは、攻撃の意思が来たら攻撃するステートマシンです。
前回と同様に、サブステートを作成して名前はAttacksとします。Attaksに左ジャブとキックのモーションを登録します。切り替え条件としてAttackTypeという値を用意します。0だとジャブ、1だとキックにしておきます。

入力からアニメーションを切り替える

ステートは本来ならスクリプトから制御すべきですが……今回は面倒くさいので、UIから直接実行します。まず、AttackTypeを指定するプロパティを用意します。これで、ボタンのUnityEventからパラメーターを直接操作できるようになります。あとはサクッとボタンを二つ用意してそれからアタックトリガーを呼び出しつつ左のボタンはAttackTypeが0、右のボタンはAttackTypeが1になるように設定します。これでボタンを押したら殴る蹴るなどができるようになりました。

コンボ攻撃に発展

まずAttacksに右ストレートのアニメーションを登録。左ジャブからのトランジションに設定します。条件は、AttackTypeが0で、AttackTriggerが押されていること。次に、トランジションのタイミングを調整します。右ストレートの開始タイミングなども調整し、ワンツーができるようになりました。

あとは、攻撃を止めても、攻撃の意思が残留してしまう事があるみたいなので、攻撃終了時にはトリガーをリセットします。
StateMachineBehaviourでステートから抜けたら、アタックトリガーをOFFに設定するコードを作成しAttacksに登録します。

攻撃の種類でコンボを分岐させよう

続いて、例えば攻撃ボタン1を連続して押せば、ワン、ツー、フック。攻撃1、1、2と押せば、ワン、ツー、キックができるような感じにします。
トランジションの条件を、Attackトリガーが押された時にAttackTypeが0の場合などと設定していき、設定タイミングも微調整します。
これで、ボタンを押す順番によってアクションが切り替わります。

ステートマシンの整理

だいぶステートマシンのExit周りが汚くなってきたので、サブステートを使って整理します。
基本的な考え方は前回の「こんがらがったAnimatorを整理」と共通しております。こちらもぜひご参考に。

整理した結果のイメージ

攻撃のアシスト機能追加

後方視点の3Dゲームの場合、視点の位置によっては距離感が掴みにくいので、攻撃を当てるためにある程度の位置補正はあって欲しい所です。
そこでターゲットマッチングの機能を使用します。これは決まったタイミングで特定の部位が特定の場所に到達して欲しい時に使う機能です。今回はキックやパンチのタイミングでちょうど相手に当たるような場所にキャラクターを移動させるのに使いました。

ということで、コンボ攻撃を作る方法でしたアクションゲームやアクションRPGなら、これで十分作れます。
それでは、次回の動画でお会いしましょう!