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

今回はバトル中のポーズメニュー処理について説明します。

バトル中のポーズ入力受付処理は、Widgetブループリント内の関数「Get Input Value For P01」やP02で行っており、キーボードのスペースバーかコントローラのオプションボタンが押されたときに実行されます。

関数「Get Input Value For P01」では、最初のブランチで入力許可状態を確認した後、バトルが開始されたかを変数”Begin Battle”を参照して確認しており、今回はこれがTrueになった時の説明となります。

ノード「Sequence」で処理が2つに別れますが、下側の処理は変数”Pause Menu”がTrueになった際に、メニューが表示された後で、方向キーやボタンの入力を受付けることを意味します。

この部分の説明は解説その2で説明しているのでここでは省略し、上側の処理を説明します。

キーボードのスペースバーかコントローラのオプションボタンが押された後は、SPゲージを使用した必殺技が発動したときやキャラクターがダメージを受けているときは、ポーズの入力を受け付けない仕様としており、これらの変数がFalseのときだけ処理できるようにしています。

その後の処理は、現在ポーズ中であるかを変数”Pause Menu”を参照して確認しており、この時はFalseとなって、Player01と02の入力を不可にし、変数”Input P01″をTrueにしているのは、Player01がポーズを実行している意味となります。

それからカスタムイベント「Begin to pause」を実行するのと同時に、バトル中のミュージックを一時停止するのと、ポーズボタンが押された音声を再生します。

それでは、カスタムイベント「Begin to pause」を説明します。

カスタムイベント「Begin to pause」では、変数”Pause Menu”と、PlayerControllerの変数”Pause Battle”をTrueにすることで、ポーズ状態となり、カスタムイベント「Pause of Battle」の処理と、ポーズメニューを表示するアニメーション「For Pause」を再生し、1秒後に、どちらのプレイヤーがポーズを実行したのか判断し、そのプレイヤーの入力を許可します。

それでは、ポーズメニューを表示するアニメーション「For Pause」を説明します。

画面全体を覆う黒い画像を使用して、画面を暗くしますが、Opacityの設定を0.25秒後に0.6にして、半透明の黒い背景にするアニメーションとし、ポーズメニューを表示する、キャンバス「Pause_Panel」を画面の下から中央へ移動させています。

それでは、PlayerControllerのカスタムイベント「Pause of Battle」を説明します。

カスタムイベント「Pause of Battle」では、マクロ「Controller ID Single」により、どちらのPlayerControllerであるか確認した後、変数”Pause Battle”を参照して、 ここではTrueとなるので、関数「Disable Input」により、キャラクターへの入力を不可とし、CPUモードか確認後、関数「Set Game Paused」により、ゲームが一時停止となります。

それでは、変数”Pause Menu”がTrueになると、WidgetブループリントのTickに繋がっている関数「Select Pause」の処理が開始されるので説明します。

関数「Select Pause」では、ポーズメニューとして、「再開する」、「タイトルへ戻る」、「リトライ」の3つの選択肢があり、さらに、☓ボタンが押された時のキャンセル処理も行います。

上下の方向キーが押された場合の値を変数”Input Value V”で確認しており、3つの選択肢のボタンの画像をアクティブとそうではないときで入れ替えています。

まず「再開する」を選択したり、キャンセルボタンが押された場合は、カスタムイベント「Release to Pause」の処理を開始した後、バトルミュージックの再開とプレイヤー両方へメニューの入力を許可し、メニュー選択の入力リセットを行っています。

次に「タイトルへ戻る」を選択した場合は、カスタムイベント「Back to Title」の処理を開始した後、バトルミュージックの停止とメニュー選択の入力リセットを行っています。

次に「リトライ」を選択した場合は、カスタムイベント「Retry Round」の処理を開始した後、バトルミュージックの停止とメニュー選択の入力リセットを行っています。

それでは、ゲーム一時停止状態からゲームを再開するためのカスタムイベント「Release to Pause」の処理を説明します。

カスタムイベント「Release to Pause」では、入力のリセットとPlayerControllerの変数”Pause Battle”をFalseにする処理を行い、さらにカスタムイベント「Pause of Battle」の処理開始と、ポーズメニューを呼び出すアニメーションの逆再生を行っています。

カスタムイベント「Pause of Battle」では、先程変数” Pause Battle”がTrueの場合を説明しましたが、ここではFalse側の処理をすることになり、かつ変数”Retry”もここではFalseとなるため、その先の処理は、キャラクターへの入力を許可し、変数”CPU Mode”の値に応じた処理を行った後、バトルの一時停止を解除しています。

次にタイトル画面へ戻るためのカスタムイベント「Back to Title」では、以前に変数”Pause Menu”がFalseの場合を説明しましたが、ここではTrue側の処理をすることになり、ポーズメニューを呼び出すアニメーションの逆再生と画面を黒くするアニメーションの再生を行った後、入力のリセットとロードしたレベルファイルの開放を行うことで、レベルブループリントが再度処理され、タイトル画面に戻ります。

次に、バトルを最初からやり直すためのカスタムイベント「Retry Round」では、入力のリセット処理と変数”End Game”や変数”Int of Round”のリセット処理を行い、ゲーム終了の解除やラウンド数をリセットしています。

さらに、画面を白くするアニメーションの再生とポーズメニューを呼び出すアニメーションを逆再生し、PlayerControllerの変数”Retry”をTrueにするのと、変数”Begin Battle”をFalseにし、バトル開始前の状態へ戻します。

そして、PlayerControllerの変数”Pause Battle”をFalseにして、ポーズ状態の解除をするのと、変数”P01 KO Count”と”P02 KO Count”を”0″にすることで、KOカウントの初期化をしています。

更にその1秒後にPlayerControllerのカスタムイベント「Reset Round」、「Pause of Battle」、「Reset SP Gauge」の処理を開始します。

そこから0.5秒後に、HPバー等を画面に表示するアニメーションを逆再生し、変数”Int of Time”へ”99″を代入することで、バトル中のタイムカウントを初期化するのと、マクロ”Prepare Animation”でアニメーション全体を初期化してから、バトル中のミュージックを再生します。

更にそこから1.0秒後にカスタムイベント「Cancel Montage」でキャラクターアニメーションのキャンセル処理を行い、画面を白くしたアニメーションを逆再生し、画面を見えるようにします。

そして最後に、プレイヤー両方の入力許可処理と、HPバーを画面に表示するアニメーションの再生やラウンドコールの処理を行っています。

これでカスタムイベント「Retry Round」の処理を説明したので、このイベント内で処理を開始していた、PlayerControllerのカスタムイベントを説明します。

カスタムイベント「Reset Round」では、マクロ「Reset Posi」にて、キャラクター位置の初期化を行い、4秒後に、バトル開始となる変数”Begin Battle”をTrueにしており、その後、CPUモードの選択に応じた処理をしています。

マクロ「Reset Posi」では、 キャラクターがしゃがんでいる状態をリセットしたり、必殺技の弾が発生していた場合の消去処理や、キャラクターの位置の初期化をしており、マクロ「Reset Flag」でバトル中に使用している変数の初期化を行っていますが、この部分の詳細説明は、バトルシステムの説明時に行います。

次にカスタムイベント「Pause of Battle」では変数”Pause Battle”がFalseで変数”Retry”がTrueだった場合の説明になりますが、1.0秒後にキャラクターへの入力許可と、ゲームの一時中断の解除と変数”Retry”のリセット処理を実施しています。

次にカスタムイベント「Reset SP Gauge」ではプレイヤー両方のSPゲージの値を”0″にリセットしています。

最後にカスタムイベント「Cancel_montage」を説明しますが、これはポーズが解除されてもアニメーションが続いている場合を想定し、関数「Montage Stop」を使用して、アニメーションを停止させています。

以上で、バトル中のポーズメニュー処理の説明は終了です。

次回はバトル中のキャラクターの移動について説明します。

コメントを残す

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

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