ファイヤーボールで攻撃

※本サイトはアフィリエイト広告を利用しています。

UE5.3でマリオ風アクションゲームを作っています
今回は敵キャラをファイヤーボール攻撃で倒せるようにします

下記動画の前半部分です。

被ダメージ処理(攻撃されたクリボー側

まずは、攻撃されたクリボー側でダメージ処理をつくります

攻撃を受けたときに発動するイベントはAny Damageです

いま時点クリボーは何かしらダメージ受けたらやられるという仕様でよいので、Destroy Actorで消しちゃいます

敵キャラクリボーのブループリント。AnyDamageノードでダメージを受けた場合、Destroy Actorで自身を消している
よっしー
よっしー

攻撃の受け方で演出を変えるなどはあとでこの辺をいじればよさそうですね
いまは仕組みづくり優先とします

ファイヤーボール

攻撃処理

前回作ったファイヤーボールを改良しますが、おさらい兼ねて処理全体を説明します。

焼きリンゴのブループリントにスフィアコリジョンを追加してOn Component Begin Overlapイベントを追加しました

よっしー
よっしー

ちなみにスフィアコリジョンのほうが計算量が軽いらしいので、Boxで作ったけどかえました。
極め本に詳しく説明なかった気がしますが、球だと点と点の距離を1回測るだけで済むけど、箱型だと一旦点と点の距離見ただけでは箱の内側かわからなくて、その方向の箱の壁を求めてその位置を出して…って計算するんでしょうね。

Apply Damageで相手側に攻撃受けたイベントを起こします

ただしこれだと発射した瞬間玉ねぎちゃん自身がダメージ食らっちゃうので
Get Player Characterでプレイヤーである玉ねぎちゃんを参照して、それとぶつかった相手(Other Actor)と比較することで、玉ねぎちゃん以外のアクターに攻撃する仕様とします

こういうとき、
ダメージを受けた玉ねぎちゃん側のAnyDamage処理でファイヤーボールからの攻撃は食らわない(無視する)という分岐も可能ですね

必要になったら考え直します

あとはクリボーやノコノコは1撃ですがボスは違うので、
即死扱いとなるDestroy ActorではなくApply Damageで攻撃した通知を送り、攻撃された側で処理わけするのがよいと思います

ダメージ(というか攻撃力というほうがイメージにあいますが)この値が0だとイベントが起きないので1に変えます

そして攻撃したら自身は消える仕様とします
ここでは簡単にDestroy Actorで消しちゃいます

よっしー
よっしー

ナイアガラ等で演出追加してもよいですね

実験した結果、発射直後に焼きリンゴ自体がなぜか自分とぶつかっていたので「自分じゃなかったら」の分岐も追加しました

この時点の処理はこうなります。

ファイヤーボールのブループリント処理で攻撃用のスフィアコリジョンに何かぶつかった場合の処理。Apply Damageで攻撃してDestroy Actorで自分は消える。


焼きリンゴ発射でちゃんとクリボーを倒せます
地面ブロック、ピーマンなどのメッシュは跳ね返ります

一見これで完了です。

しかしアイテムがでる段ボール箱やレンガブロックにはぶつかって消えてしまう問題が残ります。

よっしー
よっしー

ちなみに本家にもっと寄せるには、地面やブロックに上から当たったら跳ね返るけど、横向きにぶつかったら消えるって仕様ですね。
今回はそこは単純に跳ね返る仕様のままにします。

ポーンにだけ攻撃

これは自分自身か玉ねぎちゃん以外のアクターとぶつかったら攻撃扱いなためブループリントアクターも「アクター」なせいです
これを回避する方法を考えましょう

クリボーの親クラスが現状Pawnクラスなので、Other ActorをPawnにキャスト成功したらぶつかる判定に変えます

ちなみにこのあとで敵キャラはキャラクタークラスに親クラスを変更する予定ですが、キャラクタークラスのさらに親がポーンクラスなのでキャラクターはポーンです

たまねぎは野菜ですみたいな関係性ですね

なのでこの作戦はそのまま使える予定です

そして自分自身はポーンじゃないので、最初に自分自身じゃないかの判定は不要になりました(ポーンだったらの判定がFalseなのでそこですでに処理が止まるため)

ファイヤーボールのブループリント処理の改良版。ポーン以外にぶつかったときは無視。

これでファイヤーボールでの攻撃ができるようになりました

よっしー
よっしー

この場合、キノコがわりのパワーアップ玉ねぎもキャラクターにしているので、それにもぶつかって消えちゃいますが、そこは仕様として放置します。
それも回避したい場合は、タグ付けなどで敵・味方・その他のチーム分け情報を付けておいてそれをチェックして分岐する作戦などが考えられます。

つづく

コメント

タイトルとURLをコピーしました