「アンリアルクエスト5 ~剣を使って敵を倒そう!~」2日目を振り返る
はじめに
エピック ゲームズ ジャパンが主催するUnreal Engineの公式大型イベント
「UNREAL FEST 2023 TOKYO」
でのユーザー参加型イベント
に挑戦しました。
こちらの記事の続きです。
前の記事が詳しく書きすぎてるんですが、もう記憶も曖昧になってきたのでやったことをざっと乗せるだけにしようと思います。
もう忘れたよ……
2日目のお題は
初級:敵を全滅させたら勝ち
中級:敵が自動的に出てくる仕組みを作ろう
敵にHPをつけよう
上級:敵の攻撃をはじく仕組みを作ろう
#アンリアルクエスト 5 2日目
— 敷本ホノ (@4kimo10hono) May 23, 2023
昨日の宿題・上級は巡回と視線に入ったら接近攻撃に!……攻撃されても気づかないポンコツAI。
2日目初級はWinと表示するのとついでにスロー!(デバッグのため1体撃破で出してます)
中級・スポーンは明日の自分に任せる。HPバー追加
上級・バリア張って弾いてみました pic.twitter.com/MyEgTjLF0C
2日目の自分の進捗はこうだったようです。
2日目
1日目の宿題・上級:ビヘイビアツリーを使って敵を賢くしよう

もとから入っていたAIはプレイヤーにとにかく近づいて斬る→待機→近づく……の繰り返し。

自分が組んだツリーはこちら。
指定したターゲットポイント間を巡回してプレイヤーの視線に入ったら追いかけてくる、一定後離れる……といったもの。
中身の解説はしません、というか自分でもこれであってんのか謎な部分が多いです。
参考文献:
去年やった通称「極め本」のをまんま参考に組みました。(なんかうまく行かなかったのでちょっといじったのは内緒。)
なんと来月UE5向けにリニューアルされた極め本が出るので、興味のある方はぜひ新作を買ってみてはいかがでしょうか。自分も予約済みです。
初級:敵を全滅させたら勝ち
どうすればいいか悩んだので、出現する敵の数を決めて、その数に達したら勝利ということにしました。

ゲームインスタンスにKillCountUpというKillCountを1ずつ増やす関数を用意。

敵BPのHPが0になったらの続きに追加して、CastToでKillCountUpを呼び出すことにしました。

レベルブループリントにてKillCountUpが規定の数になったらPrintStringでWinと表示するようにしました。


ついでにプレイヤーが死んだ時にKillCountを0にするのも入れた。(2日目ではなかった気がする。)
中級:敵にHPをつけよう

敵にHPは1日目の時点で付けていたので、HPバーを追加して視覚的にわかるようにしました。

HPバーをウィジェットで作って敵のBPに追加……えーと、参考にしたまんまなので下記を参照ください。
参考文献:
敵が自動的に出てくる仕組みをつくろう!は力尽きたので明日の自分に任せたようです。
上級:敵の攻撃をはじく仕組みを作ろう
他の方は剣で剣を弾いたりしていたりしてたのですが、自分はやり方が皆目見当がつかなかったため、バリアを張って弾いちゃうことにしました。
バリアのエフェクトは昔習作で真似した下記動画のもの。

ざっと、書くとSphereコリジョンをプレイヤーBPに入れて、コリジョンをオーバーラップとNoCollisionに変えるカスタムイベントを作成しておく。
入力入れたらコリジョンをオーバーラップにしてエフェクトを指定のArrowコンポーネントの位置にコリジョンサイズと合わせて出す。終わったらコリジョンをNoCollisionにするみたいなかんじか。
あとコリジョンには「Guard」というComponentTagを仕込んでおく。


Enemyの方はプレイヤーの剣の処理と違って、持ってる剣に直接コリジョンを足した。このコリジョンが「Guard」というタグが入ったコリジョンとオーバーラップした時、敵の剣のコリジョンを解除、弾かれモーションを再生することで剣を弾いたとみなすことにした。
もっといい解はあるんだろうけど自分の力とタイムリミットではこれが精一杯でした。
以上2日目。3日目へ続く。
ではまた。