UE5.3でマリオ風アクションゲームを作っています
今回はぶつかったらやられる敵キャラ(クリボー)の頭に弱点を作り、上から踏んだら倒せるようにします。
下記YouTube動画の後半部分の説明です。
踏まれたらやられる弱点追加
踏みつけて攻撃できるようにします
クリボーはマリオに上から踏まれるとやられるので、弱点用のコリジョンを追加して、接触したら攻撃受けたと扱う仕様とします
※少し小さかったのでクリボー全体のスケールを当初の2倍にしてあります
なんとなくクセでスケールで調整していますが、本当は少し下の形状で調整するほうがいいらしいです。
推測ですが、スケールで調整すると、倍率の値も掛け算して計算する必要があるので計算量が増えたり、浮動小数点の計算誤差あたりの影響も増えちゃうといったことが考えられます。
メッシュより少しはみ出る位置にすることでメッシュに乗っかって踏めないことを防いでいます
ではイベントを作りましょう。毎度おなじみオーバーラップイベント(On Component Begin Overlap)です。Any Damageと同じように、Destroy Actorで自分自身を削除するだけとしました。
ここに直接やられた処理を記載するのではなく、Apply Damageノードで自分自身に攻撃するという形で共通化もできます
ほかにも、玉ねぎちゃん側の足側に攻撃用コリジョンを追加して、踏んだ攻撃を加えるということもできますね。
その場合は、コリジョンの設置位置か、お互いの攻撃が同時に発生した場合の処理を工夫する必要があります。
実験してみると、自分自身にぶつかっているのかなんなのかわかりませんが、ゲーム開始と同時に速攻で消えてしまったので、条件判定を追加してぶつかった相手がプレイヤーだったときに限定することで、
「玉ねぎちゃんにだけ踏まれたらやられる」という仕様にしました
もとのクリボーからの攻撃がおかしくなってないか・スーパーな玉ねぎちゃんでも確認しておきましょう。
玉ねぎちゃんが大きいとき、相打ち状態になっていました。(玉ねぎちゃんはやられて小さくなり、クリボーはやられて消える状態)
小さいときは横にしか当たってないけど、大きいときは上下2つともにぶつかっている
ということでしょうね。
であれば上のコリジョンを少し小さくして横からぶつかるときは先に攻撃する下にぶつかるようにしておきます。
X方向とY方向をおなじくらいにしておけばいいかなと。
注意点として、やられた演出を入れる場合、演出を流している時間経過の間に逆側のコリジョンとの衝突もして再度相打ちしまう可能性があるので、演出前にまずコリジョンを消すとか、イベントを無効にするみたいな対処が必要になりそうです。
完成です
歩行
最後にクリボーを歩かせたいと思います
歩く処理はパワーアップアイテムの処理を再利用しようと思います
この程度の単純な動きならAIは不要です。
キャラクタークラスにしてAdd Movement Inputに進行方向のベクトルを入力する作戦です。
あと必要なのはカプセルコンポーネントのヒットイベントで衝突時に反転する処理です。これでまっすぐ歩いて落ちていくだけでなく、土管の間を往復できるようになります。
キャラクター化
ではクリボーをポーンからキャラクターベースに変えましょう。ブループリントの編集画面で「クラス設定」から詳細の「クラスオプション」/「親クラス」を「Character」に変更します
すると自動的に、カプセルコンポーネントやMeshなどのキャラクター向けの要素が追加されたりしています。
骨を付けるのがめんどくさいのでメッシュは空っぽのままにします。
カプセルサイズが大分違うので全体バランスを見直します
自動歩行
歩行
まずは進撃用の処理をキノコ(たまねぎ)からコピペで持ってきます
このとき、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変数はすでに作っているのでこのままイケました。
動きましたし反転もうまく動いてそう
と思いきや奥の2体はくっついて止まっちゃう問題が生じました。
高速に何度も何度も反転指令がでてどっちにも進めない状態でしょうか。片方をやっつけたら動き出したのでそれっぽい気がします
この解決法は、Do OnceとDelay0.1秒で連続反転にちょっと待ち時間を入れたらなんとかなりました。
Do Onceで1回だけ処理したら一旦動かなくなることで、連続で何度も方向転換できないようにし、Delayで0.1秒待ってから再度Do Onceの閉じたゲートを開いて次の方向転換を受け付ける形にしています。0.1秒が適切かは検証が必要ですね。
歩き出すきっかけ
最後に歩き出す起動トリガを作ります
手前にボックスコリジョンを置いて玉ねぎちゃんがこれに触れたら動き出す仕様とします。名前はTriggerにしておきました
On Component Begin Overlap オーバーラップイベントを作り玉ねぎちゃんが触れたら動き出す処理を作りましょう
初期の方向(Derection変数の初期値)を[0,0,0]に変更して最初は動かないようにしておいて、このイベント発生時に[-1,0,0]セットすることで動き出すという作戦でいきます。
スポーン自体は最初からしているのであとで何かしら困ることもあるかもしれませんまぁ困ってから解決しましょう
トリガは起動したら削除(Destroy Component)しておきました。
つづく
それっぽく戦えるようにできたところで今日は終わりとします。
クリボーに関する残件としては演出は別としてスターで無敵の場合と下からブロック越しに叩ける攻撃が残っています
その辺を次回作っていく予定です。
- 第1回:やることリスト
- 第2回:サイトマップ 構成要素一覧
- 第3回:走る・跳ぶ(Blender→UE5)
- 第4回:Bダッシュ
- 第5回:ダッシュ中は高く跳べる
- 第6回:ミニとノーマルサイズの変化
- 第7回:敵に当たったらダメージ
- 第8回:ステージ作りステップ1
- 第9回:ステージ作りステップ2
- 第10回:跳ねる壊れるレンガブロック
- 第11回:ハテナブロック+コイン
- 第12回:パワーアップキノコ(たまねぎ)
- 第13回:ファイヤーフラワー(赤ピーマン)
- 第14回:ファイヤーボールで攻撃
- 第15回:踏みつけ攻撃
- 第16回:ブロック越しに攻撃
- 第17回:スターで無敵
- 第18回:亀キャラを作る
- 第19回:亀キャラの動作
- 第20回:プレイヤー専用コリジョンでファイヤーバグ対策