![見出し画像](https://assets.st-note.com/production/uploads/images/126262116/rectangle_large_type_2_e2c7dea063295a758755b9a5280f5eb0.png?width=800)
「アンリアルクエスト5」に参加したので感想などを書きます!
はい。どうもカルチョスです。
今更ではありますが今年の5月に開催されたヒストリアさん主催のアンリアルクエスト5 (以下UQ5)の感想などを書いて行こうと思います。
クエストに関する所感
まず結論からです。今回は第5回目ということもありこれまで参加してきた人にとっては慣れ親しんだクエストがあるなぁという印象でした。個人的には最後の方はスケジュールを気にしつつもDiscordのコメントやYouTubeの動画を参照しながら手を動かしつつ実装進められたのが大変でしたが楽しかったです。
今回対応した内容を一部紹介
プレイヤーから敵へのダメージ処理
下の画像のようなBPで実装しました。見てもらえればわかる通りEnemyタグが設定されたアクタを取得してダメージ処理を実行し、攻撃が当たったらサウンドを鳴らす形にしました。
![](https://assets.st-note.com/img/1704029718301-SnvaKkzwOi.png?width=800)
プレイヤーへのダメージと死亡処理
長い…ので一部処理を関数にまとめましたが下の画像のようなBPを実装しました。プレイヤーのHPが0かそうでないか判定して0だったら死亡処理を実行。そうでない場合はプレイヤーへの割合ダメージ計算処理を呼び出して、プレイヤーのHPバーを更新する処理を実行しています。その後、コントローラーからの入力を無効化して3秒後にレベルをリスタートする処理を入れています。(最後の方の処理はプレイヤーへのダメージと死亡処理とは無関係なのでコメント別で作成した方が良さそうですね…。)
HPバーの実装は下記ブログ記事を参考にしましたm(_ _)m
![](https://assets.st-note.com/img/1704030111739-ZJYcHqOXWk.png?width=800)
![](https://assets.st-note.com/img/1704030254991-qE1n0VZAzV.png?width=800)
![](https://assets.st-note.com/img/1704030261765-izZdyjDZAx.png?width=800)
![](https://assets.st-note.com/img/1704030839372-mu6Ma3cjtE.png?width=800)
アイテムの削除と取得後にプレイヤーのHPを回復する処理
ここもやや長めですが、やってることはシンプルです。アイテムを取得したらサウンドを鳴らしてアクターを削除、アイテム削除後は「Get Actor Of Class」ノードでプレイヤーのアクタークラスを呼び出してプレイヤーのHPバーを更新する処理を呼び出す形になっています。(ここも回復の計算処理はノードが見辛いので関数にまとめた方が良さそうです…。)
![](https://assets.st-note.com/img/1704030984089-zFRa9cVtTR.png?width=800)
次回開催時に意識したいこと
前回、前々回と比較するとやれることは増えましたが、エンジニアがメインジョブの僕としては以下のことは意識した方が良いと思いました。
重い処理を実装しない
今回、レベルブループリントで「Get All Actor with Tag」ノードを使っていますが、このノードは敵の数が増えると処理が重くなる要因になるので業務として実装する場合は見直しが必要な認識です。
![](https://assets.st-note.com/img/1704032385029-t5iQKoBbAu.png?width=800)
既存の処理に手を入れる際は処理を理解してから手を入れる
今回のUQ5ではプレイヤーのBPに攻撃処理が初めから書いてありましたが、AI実装を試みようと処理を弄ったところバグが発生してしまったので見送りました。これはエンジニアとしては当たり前の事だと思いますが、既存の処理に手を入れる際は必ず処理を理解した上で設計と実装を行うことは意識しないといけないです!
他の人が見てもわかる実装を心掛ける
このブログを書くにあたり改めてUE5.3でプロジェクト起動してBPの実装見たのですが、時間経って見返してみると「ん?」と思える箇所があったり、
「これは処理見直したほうが良いのでは?」という箇所がありました。適切なコメントを付けることもそうですが、変数名などをキャメルケースorスネークケースで統一するなどは意識して対応します。
という感じで簡単ですがまとめてみました。この記事が何かの参考になると幸いです。
この記事が気に入ったらサポートをしてみませんか?