今回は、バトル中のキャラクターの前後の移動について説明します。
コントローラの方向キー入力を受付けるのは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の処理もほぼ同様に行います。
今回の説明は以上です。
次回は、バトル中の前後のステップ、ジャンプやしゃがみについて説明します。
コメントを残す