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

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

コントローラの方向キー入力を受付けるのはPlayerControllerである「BP_Common_Controller」内にあるイベント「Input Axis Left」と「Input Axis Right」にて行います。

これらのイベントでは、マクロ「Controller ID Double」にてどちらのプレイヤーであるか確認を行った後、各プレイヤーの移動処理ノード「P01 L&R Move」と「P02 L&R Move」で処理を行います。

移動処理ノード「P01 L&R Move」では、上側が方向キー左が入力された場合、下側が方向キー右が入力され場合の処理となっており、変数”Begin Battle”でバトルが開始しているのであれば、入力を受け付けます。

その後、マクロ「 P01 Action Flag For Move」では、キャラクターやバトルの状況により、入力を受け付けない状態がありますので説明します。

まずは、プレイヤー両方がKOとなった場合やSPゲージを使用した必殺技を使用している時、更に自身がスタン状態となった場合は、移動の入力を禁止しています。

次に、前後のステップ中やダメージを受けてノックバックしている場合、ガードしているときも移動の入力を禁止します。

最後に打撃や投げのダメージを受けた判定となった場合や、自身がダウンや攻撃中の場合、しゃがんでいる時、空中にいる時、投げ抜けを成功した場合なども、移動入力を禁止しています。

これらの状態を管理している変数が全てFalseの場合のみ、移動の入力を受け付けます。

その後は、ノード「Sequence」と「Gate」を使用していますが、先程の禁止事項を確認している変数がTrueになった際に、GateをCloseして移動を禁止させるために設けましたが、結局その機能は使用することはなく、関数「Add Movement Input」にて移動処理を行っています。

関数「Add Movement Input」では、World Directionにてどの軸のどの方向に移動するのか基準を指定する必要があり、ここではY軸の右方向を指定しています。

さらにScale Valueによって、Y軸のどちらの方向に移動するのかが決定されるため、1が入力されれば、右側に、-1が入力されれば、左側に移動しますが、それを設定しているのは、プロジェクト設定のインプットの項目で行っています。

そしてその移動する際のスピードは、関数「Spawn Char For P01」で設定した、前後の歩行スピードにて指定しています。

それでは次に、変数”P01 F Walkspeed”と”P01 B Walkspeed”を使用して歩行スピードを指定している処理を説明します。

「BP_Common_Controller」のイベントTickに繋がった、Player01側の処理で、キャラクター同士のCapsuleコンポーネントがオーバラップしているか確認しているノードがあり、この判定がFalseになった場合のノード「P01 Moving Speed non-Overlap」で処理しています。

ノード「P01 Moving Speed non-Overlap」では、キャラクターのダメージの有無や空中にいるか、画面端にいないかの確認を行い、前後のステップや歩行スピードを設定しています。

ここでは歩行スピードの設定部分のみ説明しますが、まずはP01のキャラクターが、P02のキャラクターに対して、左右のどちら側にいるのか確認する変数”Player Side”を確認し、Trueであれば左側にいることになります。

次のブランチで、P01キャラクターに発生しているY軸方向のスピードを確認し、0より小さければ、Trueとなり、変数”P01 Char Movement”を参照した変数”Max Walk Speed”に変数”P01 F Walkspeed”の値を代入し、0より大きければ、 変数”P01 B Walkspeed” の値を代入します。

右側に移動すると速度がマイナスになるのは、レベルブループリント上のWorldDirectionとして、Y軸の右方向をマイナスとしているからです。

変数”Player Side”がFalseの場合は、Y軸方向のスピードが0より大きければ、変数”Max Walk Speed”に変数”P01 F Walkspeed”の値を代入し、0より小さければ、 変数”P01 B Walkspeed” の値を代入します。

それでは次に、歩行中のアニメーションについて説明します。

歩行中のアニメーションは、アニメーションブループリントである「Char01_AnimBP」で指定しており、AnimGraphで設定することができるステートマシンを使用しています。

ステートマシンでは、何も入力されていない時の待機状態や歩行、ジャンプとしゃがみについて設定を行っており、ここでは待機状態と歩行について説明します。

ノード「idle/Run」ではキャラクターに発生しているY軸方向の速度を参照しており、その値に応じてブレンドスペースプレイヤー「Char01 Walk Blend」を使用して設定を行っています。

ブレンドスペースプレイヤー「Char01 Walk Blend」では、設定項目のAxis Settingで扱う速度の定義を行った後、Blend SamplesでSpeedが0であれば、待機状態のアニメーション、0より大きければ、前方向の歩行アニメーション、0より小さけば、後ろ方向の歩行アニメーションを再生します。

ただし、この時の速度の値は、右向きや左向き関係なく、キャラクターとして前進するのであれば”+”、後退するのは”-” とする必要があるので、その設定方法を説明します。

アニメーションブループリントの「Char01_AnimBP」で使用されているイベント「Blueprint Update Animation」では、Tickに相当する処理で毎フレーム処理されており、そこに繋がっているノードで各キャラクターのY軸上の位置を参照しており、Player01の値のほうが大きければ、変数”Left Side”をTrueにする処理を行っています。

さらに、別のノードにて変数”Left Side”を参照し、関数「Select Float」を使用して、変数”Left Side” の値がTrueであれば、”-1.0″を乗算し、Falseであれば”1.0″を乗算しています。

これは例えばP01キャラクターが左側に位置した場合に、右方向へ前進すると、スピードの値はWorldDirectonの設定に従い、マイナスとなりますが、先程の変数”Left Side”の処理によって、値がプラスに変換され、ステートマシンで使用され、後退した場合は、WorldDirectonの設定に従い、スピードの値はプラスとなりますが、変数”Left Side”の処理によって、マイナスに変換され、キャラクターとして正しいアニメーションが表示されるようになっています。

ここまでPlayer01の処理を説明してきましたが、Player02の処理もほぼ同様に行います。

今回の説明は以上です。

次回は、バトル中の前後のステップ、ジャンプやしゃがみについて説明します。

コメントを残す

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

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