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

今回は、お互いのキャラクターが離れている場合や、画面の端にいる場合に、それ以上後ろへ行けないようにする機能として、サイドウォールの処理を説明します。

サイドウォールは実際に壁を使用しているわけではなく、関数「SetActorLocation」を使用して、キャラクターがそれ以上後ろへ移動しないように制御しています。

サイドウォールの処理は、「BP_Common_Controller」のイベントTickに繋がった処理で、ノード「P01 Side Wall」で処理しています。

ノード「P01 Side Wall」では、P01とP02キャラクターのY座標の位置を引き算し、変数”Distance Of Char”へ代入しており、キャラクター間の距離を算出しています。

次に、変数”Distance Of Char”が480以上であるかを確認していますが、Trueであれば、両キャラクターが画面の端にいることになります。

そして、P01キャラクターのY座標が2845以上であるかを確認しており、Trueであれば、P01キャラクターがステージの左端にいることになります。

さらに、P01キャラクターのY座標が1155以下であるかを確認していますが、Trueであれば、P01キャラクターがステージの右端にいることになります。

それでは次に、P01キャラクターのY座標が2845以上ではないが、2840以上である場合の処理を説明しますが、これはもう少しでステージの端に到達するため、マージンを持って処理をしています。

変数”P01 B Step”がTrueの場合は、バックステップしながら、画面の端に到達するので、P01キャラクターに発生している1フレーム当たりに移動する距離から変数”P01 B Step LS”の値を引いて、関数”SetActorLocation”へセットすることで、1フレーム当たりに移動する距離が相殺され、バックステップのアニメーションは再生していますが、位置は変化しないという処理になります。

さらに、変数”P01 B Step”がFalseの場合は、変数”P01 RS F Dash”を確認しており、Trueの場合は、右側から前ステップしながら左側の画面の端へ到達するので、P01キャラクターに発生している1フレーム当たりに移動する距離から、変数”P01 F Dash RS”の値を引いて、関数”SetActorLocation”へセットすることで、1フレーム当たりに移動する距離が相殺され、前ステップのアニメーションは再生していますが、位置は変化しないという処理になります。

P01キャラクターのY座標が1155以下ではないが、1160以下である場合も同様に、前ステップやバックステップの変数の値が違うだけで同様の処理となります。

次に、変数”Distance Of Char”が480以上の場合やY座標が 2845以上、若しくは1155以下である場合の処理を説明します。

P01キャラクターのY方向の速度に対し、設定されたフレームレートの値を使用して除算すると、1フレーム当たりに移動する距離が算出できるので、現在のY方向の1フレーム当たりに移動する距離からこの算出した値を引いて、関数”SetActorLocation”へセットすることで、1フレーム当たりに移動する距離が 相殺され、位置は変化しないという処理になります。

説明は以上となりますが、現在のサイドウォールの処理は、無駄なブランチの判定があることがわかりましたので、次回のバージョンアップ時に改善したいと思います。

次回は、キャラクターの向きについて説明します。

コメントを残す

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

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