踏みつけ攻撃と体当たり攻撃の攻防:vsクリボー

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

UE5.3でマリオ風アクションゲームを作っています
今回はぶつかったらやられる敵キャラ(クリボー)の頭に弱点を作り、上から踏んだら倒せるようにします。

下記YouTube動画の後半部分の説明です。

マリオ風アクションゲームの作り方解説動画#11 ファイヤーボールと踏みつけでクリボーと戦います

踏まれたらやられる弱点追加

踏みつけて攻撃できるようにします

クリボーはマリオに上から踏まれるとやられるので、弱点用のコリジョンを追加して、接触したら攻撃受けたと扱う仕様とします
※少し小さかったのでクリボー全体のスケールを当初の2倍にしてあります

クリボーの頭部に踏まれる弱点用のコリジョンを追加しているところ
よっしー
よっしー

なんとなくクセでスケールで調整していますが、本当は少し下の形状で調整するほうがいいらしいです。
推測ですが、スケールで調整すると、倍率の値も掛け算して計算する必要があるので計算量が増えたり、浮動小数点の計算誤差あたりの影響も増えちゃうといったことが考えられます。

メッシュより少しはみ出る位置にすることでメッシュに乗っかって踏めないことを防いでいます

ではイベントを作りましょう。毎度おなじみオーバーラップイベント(On Component Begin Overlap)です。Any Damageと同じように、Destroy Actorで自分自身を削除するだけとしました。

弱点と接触されたら自分を消すブループリント
よっしー
よっしー

ここに直接やられた処理を記載するのではなく、Apply Damageノードで自分自身に攻撃するという形で共通化もできます

弱点と接触されたら自分を消すブループリントの消す処理をコピペではなく自分への攻撃で共通化する例
よっしー
よっしー

ほかにも、玉ねぎちゃん側の足側に攻撃用コリジョンを追加して、踏んだ攻撃を加えるということもできますね。
その場合は、コリジョンの設置位置か、お互いの攻撃が同時に発生した場合の処理を工夫する必要があります。

実験してみると、自分自身にぶつかっているのかなんなのかわかりませんが、ゲーム開始と同時に速攻で消えてしまったので、条件判定を追加してぶつかった相手がプレイヤーだったときに限定することで、
「玉ねぎちゃんにだけ踏まれたらやられる」という仕様にしました

弱点を踏まれたら自分を消す処理にプレイヤーに踏まれたか否かの分岐を追加

もとのクリボーからの攻撃がおかしくなってないか・スーパーな玉ねぎちゃんでも確認しておきましょう。

玉ねぎちゃんが大きいとき、相打ち状態になっていました。(玉ねぎちゃんはやられて小さくなり、クリボーはやられて消える状態)
小さいときは横にしか当たってないけど、大きいときは上下2つともにぶつかっている
ということでしょうね。

サイズによって当たり判定がうまくいかない例
左側の猫には体と頭に別の当たり判定があり、体にぶつかると勝つ設定。上の例では相手が体にしかぶつからないので勝っているが、下の例では頭にもぶつかっているので相打ち状態

であれば上のコリジョンを少し小さくして横からぶつかるときは先に攻撃する下にぶつかるようにしておきます。
X方向とY方向をおなじくらいにしておけばいいかなと。

当たり判定の改善を行った後。
上から踏まれた時は負けており、横からぶつかった場合は勝っている
よっしー
よっしー

注意点として、やられた演出を入れる場合、演出を流している時間経過の間に逆側のコリジョンとの衝突もして再度相打ちしまう可能性があるので、演出前にまずコリジョンを消すとか、イベントを無効にするみたいな対処が必要になりそうです。

完成です

歩行

最後にクリボーを歩かせたいと思います

歩く処理はパワーアップアイテムの処理を再利用しようと思います

この程度の単純な動きならAIは不要です。
キャラクタークラスにしてAdd Movement Inputに進行方向のベクトルを入力する作戦です。
あと必要なのはカプセルコンポーネントのヒットイベントで衝突時に反転する処理です。これでまっすぐ歩いて落ちていくだけでなく、土管の間を往復できるようになります。

キャラクター化

ではクリボーをポーンからキャラクターベースに変えましょう。ブループリントの編集画面で「クラス設定」から詳細の「クラスオプション」/「親クラス」を「Character」に変更します
すると自動的に、カプセルコンポーネントやMeshなどのキャラクター向けの要素が追加されたりしています。

ポーンクラスからキャラクターに設定変更しているところ
キャラクタークラスに変更された直後。カプセルコンポーネントや矢印が追加されている

骨を付けるのがめんどくさいのでメッシュは空っぽのままにします。
カプセルサイズが大分違うので全体バランスを見直します

自動歩行

歩行

まずは進撃用の処理をキノコ(たまねぎ)からコピペで持ってきます

敵キャラへのキー入力相当の処理。どの向きにキーを倒しているかの情報をDirection変数で変更できるようにしている

このとき、Direction変数はこのままだとコンパイル時に未定義エラーになるので、一旦削除して作り直します。

よっしー
よっしー

この辺面倒臭すぎますね
フォーラムでユーティリティ作ったよって話がありましたが作成当初は無料で配られていたようですが有償化されてました( ;∀;)

Is there a way to duplicate all the variables of one blueprint and paste them into another, all at once?

(翻訳)1 つの設計図のすべての変数を複製して、それらを別の設計図に一度に貼り付ける方法はありますか?

Copy Variables between Blueprints – Programming & Scripting / Blueprint – Epic Developer Community Forums (unrealengine.com)
玉ねぎちゃんがクリボーを踏みつけているが、コリジョンがうまく設定されておらず、着地がズレて落ちていく様子

おっと踏めたけどなんかカクっとずれました。これはカプセルとぶつかっている状態ですね
カプセルを低くして再調整しました

コリジョンを適切に調整したクリボー
玉ねぎちゃんがクリボーを踏みつける様子。コリジョンが適切になったのでつっかかりなく着地できている

では改めて歩く処理です

初期の方向をセットしとかないと動かないので一旦コンパイル後にDerection変数を[-1,0,0]と設定します(マリオが進む側をX方向プラスとしているため)
Max Walk Speed歩行速度をデフォルトの半分300に減らして速度調整もややゆっくりにしておきました。

反転

歩いていて壁にぶつかったら反転させたいです。

カプセルコンポーネントにヒットイベントを追加して、落下時の地面との接触でなければ入力する軸の方向を反対にする作戦とします。

これもパワーアップ用のキノコからコピペでOKです。このときDirection変数はすでに作っているのでこのままイケました。

クリボーが直進して壁などの障害物にぶつかった場合のイベント処理。法線方向のZ成分を確認し、横向きだったらキー入力用の方向変数を反転させている

動きましたし反転もうまく動いてそう
と思いきや奥の2体はくっついて止まっちゃう問題が生じました。

高速に何度も何度も反転指令がでてどっちにも進めない状態でしょうか。片方をやっつけたら動き出したのでそれっぽい気がします

この解決法は、Do OnceとDelay0.1秒で連続反転にちょっと待ち時間を入れたらなんとかなりました。

ひとつ前の図の改良。2体のクリボーがぶつかった場合など、壁と挟まれて同時に反転処理が多数発生するとどちらにも動けない状態となるのでDo OnceとDelayで遅延させて回避している
よっしー
よっしー

Do Onceで1回だけ処理したら一旦動かなくなることで、連続で何度も方向転換できないようにし、Delayで0.1秒待ってから再度Do Onceの閉じたゲートを開いて次の方向転換を受け付ける形にしています。0.1秒が適切かは検証が必要ですね。

歩き出すきっかけ

最後に歩き出す起動トリガを作ります

手前にボックスコリジョンを置いて玉ねぎちゃんがこれに触れたら動き出す仕様とします。名前はTriggerにしておきました

クリボーが歩き出すためのきっかけとなるプレイヤーがぶつかるためのコリジョンを設置された状態

On Component Begin Overlap オーバーラップイベントを作り玉ねぎちゃんが触れたら動き出す処理を作りましょう

初期の方向(Derection変数の初期値)を[0,0,0]に変更して最初は動かないようにしておいて、このイベント発生時に[-1,0,0]セットすることで動き出すという作戦でいきます。

スポーン自体は最初からしているのであとで何かしら困ることもあるかもしれませんまぁ困ってから解決しましょう

クリボーの起動トリガイベント。あらかじめDirection変数は0初期化に変更してあるため、ここで-1をセットすることで歩きだす。歩き出したらトリガ自体は用済みなので削除

トリガは起動したら削除(Destroy Component)しておきました。

つづく

それっぽく戦えるようにできたところで今日は終わりとします。

クリボーに関する残件としては演出は別としてスターで無敵の場合と下からブロック越しに叩ける攻撃が残っています

その辺を次回作っていく予定です。

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