気づけばツール漬け

3D,2Dのツールを色々使ってみた記録を書いていきたいです。

「爆丸岩」開発メモ

はじめに

第19回UE5ぷちコン応募作「爆丸岩(ばくがんがん)」開発メモです。UE5.1.1を使いました。
前回まで制作メモって言ってましたが、今回から「開発」って言うことにしました。ぷちコンとか規模関係なく、ゲームづくりは開発です。

今回も(ここのところずっとですが)ぷちスタのお題に乗りました。
実は先にロックオンを主体にしたシューティングを作っていたりしたのですが、プロトタイプをつくったところで微妙に感じたのでやめました。作っている過程で学べたことはあるので、何かに活用できたら良いなとは思っています。
設定が色々とややこしいと感じてたChaos Destractionですが、比較的簡単に破壊ができるのでやってて楽しかったです。
今回の開発は爆弾と岩が主役なので、その辺について書こうと思います。

 

 

応募動画はこちら

www.youtube.com

せっかくなので、パッケージにもしてみました。Windows11(22H2)で動作確認しました。
(安全ではないアプリと注意されると思いますが、「詳細」をクリックして回避できると思います)

drive.google.com

爆弾の爆発

爆弾はスポーンされたと同時にBeginPlayでタイマーを開始し、5秒後に爆発のイベントを呼ぶようにしました。
爆発イベントになったら、爆風として扱うスフィアトレースを出してその範囲に入っているActorから、岩と他の爆弾やプレイヤーをActorHasTagで見つけて通知を送るようにしました。インターフェイスの通知で、スフィアトレースがHitしたロケーションを渡して、それを受け取った岩の中でフィールドを出して破片をふっとばすようにしました。
この通知がプレイヤーに渡った場合は、同じくフィールドを発生させてラグドールにして飛ばすという処理にしました。

爆破した瞬間は下図の感じになります。床にも当たるのでそれを無視するために、Tagを使って選択してヒットしたアクターに通知しています。

他の爆弾が通知を受け取ったときは、とくに吹っ飛ばないのでフィールドは発生させずに、タイマーをクリアしてからExplosionイベントを呼んで爆発させるようにしました。

DoOnceをつかわないと無限ループになってUEが落ちてしまうので入れました。
IsDetonationのBool変数は、誘爆させたらスコアアップとかできないかなと考えて設定しましたが結局未使用です。

爆風を受け取った岩の処理

岩に爆風があたったロケーションにフィールドを出すようにしました。壊れた破片をできるだけ上に飛ばすように、爆弾側のスフィアトレースを少し地面に近いところで発生するようにオフセットしました。
フィールドでふきとばす直前に、ジオメトリコレクションのPhysicsシミュレーションを有効にしました。直前にしておかないと、ちょっとプレイヤーが触れただけで崩れたり、爆発で飛んできた他の破片がぶつかっただけで崩れたりします。
Endurance(耐久力)の変数は大きめの岩を壊すときに必要な爆弾の数を数えるために設定しました。

フィールドシステムは、ヒストリアさんの記事を参考に設定しました。とても助かりました。ありがとうございます。フィールドシステムはBPなので、好奇心のおもむくまま中を開いて見てみましたが、そっ閉じしました。

historia.co.jp

余談ですが、爆弾も岩もほぼ同じサイズにしたのは、グリッドにそって作ろうとしていたからなのですが、なんだかんだで結局グリッドは無視しました。
爆弾と岩とのブロックの判定も、アリにしたりナシにしたり試行錯誤しました。岩と爆弾をブロックさせると置けそうなところに置けなかったり、そもそもスポーンできなかったりしたので岩と爆弾のコリジョンは無視しました。ですが、プレイヤーが「挟まれて動けなくなる」というのは、某ボンバー●●にとっては大事な要素なのでプレイヤーキャラはブロックするようにしました。

爆弾のキック

爆弾を蹴るときはプレイヤーのすこし先にトレースを出して、爆弾がHitしてるときだけ入力を受け付けるようにしました。キックの入力のときに爆弾にインパルスを与えて転がしました。キックの連打をふせぐため、DoOnceを間にはさみました。

CheckKickableActor関数の中はこんな感じです。赤い爆弾は無視するようにしました。

キックの通知を受け取った爆弾側は、シミュレーションと重力を有効にして転がるようにしました。

キックのアニメーションと爆弾を置くときのアニメーションは、akeytsuを使って自作しました。UE5のマネキンにはIKの設定が入っているので、UE4のときと同じようにアニメーションを作ると足が地面に固定されて動かないようになってました。ぷちスタの期間中ではやりかたがわからずこれを解除できなかったのでIKのノードも足首と一緒にあわせて強引に動かす(akeytsuのコンストレイントです)という方法で解決しました。

爆弾モデル

爆弾と岩のモデルはブレンダーで作りました。
爆弾の導火線が減っていくのは、スケルタルメッシュのアニメーションでやりました。

1秒で完全に引っ込むアニメーションを作成して、それを爆発までの時間で割り算してPlayRateに設定しました。

あとは導火線の先端にソケットを設定して、Tickでソケットのロケーションを更新しつつ火花のエフェクトを出すようにしました。図のFuseが、Niagara Particle System Componentです。

おわりに

開発の途中では、各ステージで失敗したらそのステージをリトライできるようにしていたのですが、リトライを何度も繰り返すと、タイトルに戻るときやゲーム終了時に、10秒~長いと1分くらいの時間がかかるようになってしまいました。リトライの回数が多いほど、タイトルに戻るときの時間が伸びる感じでした。リトライしなければ1秒程度でタイトルへ切り替わるのに……。完全に固まっていてフリーズしたみたいに見えるので、リトライを入れるのは断念しました。


つぎはぷちコン20回になりますね。20回目も参加するつもりです。次もぷちスタに乗っかる気でいます。気軽に参加できるのでぷちスタありがたいです。