UE4で格闘ゲームが作れるプログラムをアップデートしたので、そのプログラムや設定の解説をしていきます。
今回はその4ということで、SPバーの仕様変更とガード中の反撃について説明します。
まずは、SPバーについて、以前は1本のプログレスバーでしたが、今回のアップデートで4分割しています。
これは、4本のプログレスバーを使用して、1本のSPバーを構成しており、計算と管理方法を説明します。
SPバーを管理している変数は以下のとおりです。
・”P01_SP”:SPバー全体の値を管理する変数
・”P01_SP_1″:4つに分割した1本目のバーの値を管理する変数
・”P01_SP_2″:4つに分割した2本目のバーの値を管理する変数
・”P01_SP_3″:4つに分割した3本目のバーの値を管理する変数
・”P01_SP_4″:4つに分割した4本目のバーの値を管理する変数
SPバーに値が加算されるのは、攻撃ボタンを押したときやダメージを受けたときなので、変数”P01_SP”に値が加算された処理の後に、詳細な値を計算するイベント「P01_Cal_SP」を追加しています。
イベント「P01_Cal_SP」では、まず、変数”P01_SP”の値が1.0以下であるかを確認しており、Trueであれば、変数”P01_SP”の値を変数”P01_SP_1″に代入します。
Falseであれば、変数”P01_SP_1″に1.0を代入し、変数”P01_SP”の値が2.0以下であるかを確認しており、Trueであれば、変数”P01_SP”の値から1.0を引いた値を変数”P01_SP_2″に代入します。
変数”P01_SP”の値が1以下でも2以下でもない場合は、変数”P01_SP_2″に1.0を代入し、変数”P01_SP”の値が3.0以下であるかを確認しており、Trueであれば、変数”P01_SP”の値から2.0を引いた値を変数”P01_SP_3″に代入します。
さらに、変数”P01_SP”の値が1以下でも2以下でも3以下でもない場合は、変数”P01_SP_3″に1.0を代入し、変数”P01_SP”の値が4.0以下であるかを確認しており、Trueであれば、変数”P01_SP”の値から3.0を引いた値を変数”P01_SP_4″に代入します。
Falseであれば、変数”P01_SP”に4.0を、”P01_SP_4″に1.0を代入しています。
次にこれらの値を、画面のSPバーに反映する処理を説明します。
まずは、Widgetブループリントで、PlayerControllerのSPを管理している各変数の値を参照できる関数を用意します。
そして、各プログレスバーのパーセントの値にバインドします。
さらに、各プログレスバーの値が1.0以上になった時にバーをオレンジ色に変更するため、WidgetブループリントのTickに繋がった処理で、バーの色を保存する変数を用意して、以下のように処理をしています。
4番目のバーが1.0以上になった場合は、ノード「Do Once」を使用して、画面に「MAX!」と表示するアニメーションを再生しています。
最後に、バーの色を保存した変数の値をプログレスバーに反映するため、関数を用意してプログレスバーのカラーにバインドしています。
それでは、次にガード中の反撃について説明します。
PlayerControllerのTickに繋がった処理でガードの判定をしており、変数”Player Side”の値を参照して、キャラクターの向きに対応したガードに相当する方向キーが入力された場合は、変数”P01 Input-Guard”がTrueになります。
変数”P01 Input-Guard”がTrueになると、イベント「Guard On」が処理され、ガードできる状態であれば、キャラクターの向きに対応した変数”P01 Guard L”か”P01 Guard R”がTrueになります。
さらに相手の攻撃がヒットしていると変数”P01 Hit Back”がTrueになり、整数型の変数”P01 Guard Timer”に1フレーム毎に1が加算されるよう処理することで、ガードしてからのカウントが開始されます。
次にガード中の反撃はSPバーが1本以上チャージされている状態で、L2ボタンを押す必要があるため、L2ボタンが押された時のイベント処理を説明します。
まず、変数”L2 Key”をTrueにして、L2ボタンが押されたことを確認できるようにしています。
次にガードの入力が成立していて、変数”P01 Guard Timer”の値が1以上8以下、かつ、変数”P01 SP”の値が1以上であれば、変数”P01 G Reversal”をTrueにして、ガード中の反撃が成立したことにしています。
次にSPバーが何本チャージされているか確認し、例えば2.5本分チャージされている場合は、3本目のバーを0にし、2本目のバーから1.0を引き算する処理をしています。
そして、変数”P01_SP”の値から1.0を引き算した後に、イベント「P01 Cal SP」でSPバーの値の処理を行い、イベント「Guard OFF」でガードを解除し、イベント「D-Box OFF」で一時的に無敵とするため、ダメージ判定をOFFにしています。
その後、ガード中の反撃専用の効果音を再生し、関数「Delay」の処理後に、変数”P01 Begin to Attack”をTrueにして、攻撃の種類を特定する変数”P01 Kind of Attack”と”Where to Attack”に必要な値を代入しています。
変数”P01 Begin to Attack”がTrueになると、アニメーションブループリントの攻撃アニメーションを再生する処理が開始され、変数”P01 Kind of Attack”の値を参照して、9番目のアニメーションが再生され、再生終了後にダメージ判定をONに戻しています。
ガード中の反撃用のアニメーションが再生されると、通知により、攻撃判定のON/OFFや攻撃終了の処理を行い、変数”P01 G Reversal”がFalseに設定されます。
さらに変数”P01 G Reversal”がTrueになった時に、WidgetブループリントのTickに繋がった処理で、画面に「G-Reversal」のテキストを表示するアニメーションが再生されます。
今回の説明は以上になります。
次回はスウェーとパリングについて説明します。
コメントを残す