格闘ゲームの作り方・プログラムの解説 その15

今回は、ガードやヒットバック、ダウンからの起き上がり処理について説明します。

ガードは、Player01の場合、「BP_Common_Controller」のTickに繋がった処理で、変数”Player Side”がTrueであり、かつ”Left Key”もTrueである場合や、変数”Player Side”が Falseであり、かつ”Right Key”もTrueであれば、変数”P01 Input -Guard”がTrueとなり、ガードが入力されていることを参照できるようにしています。

さらに、変数”P01 Input-Guard”がTrueになると、カスタムイベント「Guard On」の処理を開始します。

カスタムイベント「Guard On」では、マクロ「Controller ID Double」を使用して、どちらのPlayerが入力したのか確認を行った後、ノード「P01 Guard Flag」の処理を開始します。

ノード「P01 Guard Flag」では、Player02のコントローラの変数”P02 Begin to Attack”の値を確認し、攻撃中か確認しており、攻撃中であれば、P02キャラクターとの距離が200cm以下、若しくは、P02が攻撃中でなくても、FireBallやIceBallとの距離が120cm以下になったときは、ガードができる状態であるか確認します。

ガードができる状態なのかは、攻撃中、ステップ中、ダメージ中、スタン中、タイムオーバーの確認を行っており、すべてFalseであれば、入力した方向キーの値に応じて、変数”P01 Guard L”か”P01 Guard R”をTrueにします。

また、左右の方向キーの入力が離された場合や、ガードできる状態なのか確認している変数でTrueとなった場合は、ガード関連の変数が初期化されます。

それでは、ガードアニメーションの説明をします。

アニメーションブループリント「Char01_AnimBP」のイベント「Blueprint Update Animation」に繋がった処理で、変数”P01 Guard R”と”P01 Guard L”を確認した結果、Trueであり、かつダメージやダウンをしていなければ、変数”P01 Crouch”の値に応じて、変数”P01 Guard R”と”P01 Guard L”の値がFalseになるまで、立ちかしゃがみのガードアニメーションが再生されます。

アニメーション再生と同時に、カスタムイベント「Setting Attack-Flag OFF」を処理して、攻撃関連の変数を初期化しています。

それでは次にヒットバックの処理を説明します。

ヒットバックは、「BP_Common_Controller」のイベントTickに繋がった処理で、ノード「P01 Hit-back」で処理しています。

ノード「P01 Hit-back」では、ノード「Sequence」を使用して2つの処理を行っており、まず下側では、変数”Hit Back”を確認して、Trueであれば、ノード「Do Once」を使用して、変数”P01 Damaged By T”を確認し、投げによるダメージであれば、Switchノードを使用してキャラクターに応じた待機処理を行った後、変数”Gate For HB P01″をTrueにします。

投げによるダメージでなければ、そのまま変数”Gate For HB P01″をTrueにします。

この、変数”Gate For HB P01″がTrueの間、キャラクターが攻撃のヒットによって、後ろに下がる処理を行います。

上側の処理では、変数”Gate For HB P01″がTrueであれば、継続して処理を行い、ノード「Sequence」で2つの処理を行っており、下側の処理では、ノード「Do Once」を使用して、変数”P01 is Damaged Counter”を確認し、Trueであれば、カウンターヒット専用の後ろへ下がる時間を関数「Delay」を使用して設定します。

カウンターヒットでなければ、変数”P02 Char Num”を参照したSwitchノードを使用して、どのキャラクターが使用されているのか特定し、その後は、変数”P02 Kind of Attack”を参照したSwitchノードを使用して、攻撃種類に応じた後ろへ下がる時間を関数「Delay」を使用して設定後、変数”Gate For HB P01″と”P01 Hit Back”をFalseにしています。

上側の処理では、変数”P01 Damaged By T”で投げによるダメージか確認しており、Trueであれば、変数”P01 Success Throw T”で投げ抜けが成功したか確認しています。

投げ抜けが成功した場合は、変数”Player Side”でキャラクターの位置を確認した後、次のブランチでP01キャラクターが画面の端にいるか確認しており、Trueであれば、P02キャラクターだけ、関数「SetActorLocation」を使用して後ろへ下げます。

P01キャラクターが画面の端にいない場合は、関数「SetActorLocation」を使用して両方のキャラクターを後ろへ下げています。

次に投げ抜けではない場合は、変数”Player Side”でキャラクターの位置を確認した後、次のブランチでP01キャラクターが画面の端にいるか確認しており、Trueであれば、P02キャラクターだけ、関数「SetActorLocation」を使用して後ろへ下げます。

P01キャラクターが画面の端にいない場合は、関数「SetActorLocation」を使用してP01キャラクターだけ後ろへ下げています。

次に、投げによるダメージではない場合の処理について説明します。

まずは、変数”Player Side”でキャラクターの位置を確認した後、次のブランチで変数”P01 In Air”で空中にいるか確認しており、Trueであれば、P01キャラクターが画面の端にいるか若しくは、両キャラクターが離れている影響で画面の端にいる場合は、関数「Launch Character」を使用して、真上に飛ぶように設定しています。

P01キャラクターが画面の端にいない場合は、関数「Launch Character」を使用して後ろへ飛ぶように設定しています。

次にP01キャラクターが空中にいない場合は、P01キャラクターが画面の端にいないか確認し、画面の端にいる場合で、かつP02キャラクターとの距離が150cm未満であれば、関数「SetActorLocation」を使用してP02キャラクターを後ろへ下げます。

P01キャラクターが画面の端にいない場合は、関数「SetActorLocation」を使用してP01キャラクターを後ろへ下げます。

それでは最後に、キャラクターがダウンした後の起き上がりの処理について説明します。

起き上がりの入力は、「BP_Common_Controller」のInputAction Crouchで受け付けており、マクロ「Controller ID Double」でどちらのPlayerが入力しているのかの確認後、ノード「P01 Crouch」で処理しています。

ノード「P01 Crouch」では、変数”P01 Down Anim”と”P01 KO”の値を確認して、ダウンはしているが、KOでなければ、変数”P01 Count Down Key”の値を確認して、方向キー下が0.5秒以内に2回入力されていれば、変数”P01 Getup”をTrueにして、起き上がりのアニメーション処理を開始します。

起き上がりのアニメーション処理は、アニメーションブループリント「Char01_AnimBP」のイベント「Blueprint Update Animation」に繋がった処理で、変数”P01 Getup”を確認しており、Trueであれば、ノード「Do Once」を使用して、カスタムイベント「P01 Getup」の処理を開始します。

カスタムイベント「P01 Getup」では、KOでなければ、「BP_Common_Controller」のカスタムイベント「OFF Down Anim」の処理と、変数”P01 Down Anim”をFalseに設定し、PlayMontageで起き上がりのアニメーションを再生します。

起き上がりのアニメーションについては、通知の設定は無く、その後イベント「Anim Notify Down Off」でダウンや起き上がりの変数の初期化やダメージ判定の有効化処理を実施しています。

また、KOではないダウン時のアニメーションには”Getup”の通知が設定してあり、カスタムイベント「P01 Getup」の処理を開始します。

今回の説明は以上です。

次回はスタンの説明をします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください