見出し画像

アンリアルクエスト5の中級をクリアしました

こんにちは、オボロです。
アンリアルクエスト5の中級までをクリアしました。

本題:アンリアルクエスト5の中級

まずは動画をどうぞ。
UEのバージョン:5.1.1
使用アセット
・Isometric World : Sky Temple
・Blink and Dash VFX

当たり判定の厳密化&回避の無敵時間&ジャストスロー

初級の続きを作るに当たり、まず当たり判定の厳密化を行いました。
参考にしたのはこちらの動画です

基本的に動画の通りに実装しました。
・判定が振り下ろした時だけに!
・ジャスト回避&スローになる演出を実装!
・スローに入る時と終わる時に音が鳴るように!
また、攻撃モンタージュ再生中にダメージモンタージュが再生されると、攻撃のアニメーションが終了しなかったことでIsAttackのオンオフがされず判定がおかしくなるので、OnInterrputed(中断されると)でオフになるよう繋ぐことで、モンタージュの再生が中断されたときの対処ができました。
他にも、初級のまとめに書いた「敵が攻撃中に倒すと、倒れたあとも武器の攻撃判定が残るのは、崩れ落ちる演出のあたりで武器のコリジョンをEnable(でNone)にすれば直りそう?」を、書いたとおりのやり方で直しました。(それでもたまに当たり判定が残る。理由不明)

回避の無敵時間の実装のタイミングで「ダメージを受ける処理」をPlayerのBPに集約しました。
これまではUQ1でのやり方(敵がプレイヤーにダメージを与える→プレイヤーはダメージを受けたら変数HPが減る)で実装していたのですが、それは今回適していなかったのでは?と思いました。
ケースバイケースだとも思うのですが、誰を主体とするか考えるのが大事かなと思いました。

参考動画で「スローの演出にポストプロセス」とあり、これはUQ2の課題にあったのでそちらで試します。
スロー中でもダメージを受けることがあり、スロー中はプレイヤーのコリジョンをNoneにすれば修正可能かな?と考えてます。
それから刀のコリジョンをボックスで作ったのですが、よくよく考えたら回転すると判定が「重なる→離れる→重なる」になる場合があるので、動くものはカプセルやスフィアで実装するべきだなと思いました。

作品紹介動画で、スローについて「不具合の原因になり得る」とか「(実装が)めんどくさい」みたいな話もあったので、画面映えしたりアクションとして面白いけど開発としては難しいものなのかなと思いました。

敵が自動的に出てくる仕組みを作ろう

最初にSpawn Actor from Classでやってみたのですが、敵が動かない…!
DiscordでSpawn AI From Classを知り、Set Timer by Eventと組み合わせて無事に実装できました!

実装したあとに、この仕組みは「敵を全滅させたら勝ち(『レベル上の敵の数』をカウントして、『0以下』になったら勝ち)」というルールと噛み合ってないと思いました。
プレイヤーの火力やスポーンの間隔次第で、永遠にクリアできないor想定より早くクリアできてしまうケースが容易に考えられるからです。
課題自体はクリアできたので、今回はこの問題を保留にしました。
クリアしてもスポーンが止まらない状態も含め、試行錯誤したけど上手く行かず煮詰まったのでそのままにしています。

連続攻撃をしよう

こちらの動画を参考に実装しました。

現在はすべてのモーションで攻撃力が同じなので、威力を変えてみたいです。
Boolean関数で実装できるかも?と思ってます。
現状でも複雑だったのでGAS(Gameplay Abilities System)を使ってみたいです。C++に向き合うぞ!

爆弾を作ろう

いわゆる範囲攻撃が出来るアイテムを作りました。

  • UQ1で弾丸を作ったので、それを元に考えた

  • 「爆発の範囲を指定して、その中の敵にダメージを与える」→Apply Radial Damageを使う(減衰せず、プレイヤーにダメージが入らないように)

  • EnhancedInputでTriggeredに繋いだので、押している間爆弾が出続けていた→Startedに繋ぐ

  • 物理演算で動かす場合、EmitterのLocationがActorだと爆弾が生成された位置にエフェクトが出てズレる→WorldのLocationにする

  • 「敵が接触した」をBegin OverlapでもHitでも認識しないことがある

  • ダメージを受けた敵のエフェクトが斬撃のまま→攻撃に属性をつけたい

上記のように色々考えることがあったのですが「UE 爆弾」と調べてもダメージについてまで書かれている記事が無かったので大変でした。
放物線を描く投擲とか、敵が吹っ飛ぶようにしたいとか、回数制限をつけたいとかあったんですけど今回は見送りました。

ノードでRadiusと入力したら、コリジョンの半径を変更するものがあったので「爆発した瞬間に半径を拡大して、その範囲内にダメージを与える」という処理も出来るのでは、と考えたらそのやり方をしているUQ5解説記事をTwitterで見つけました(全て自力で取り組んだ後に読みました)。中級までの内容がまとまっていたので一番下にリンクを貼ります。

UIを実装しよう

オフィシャルのラーニングでプレイヤーのHPバーはやっていたのでそれと、+αの精神で敵のHPバーとジャストスロー成功の文字演出を実装しました。
作品紹介動画で、中央に向かって減っていくHPゲージについてプラスのコメントがされていたのでそれを真似しました。
プログレスのBar Fill Typeを「Fill from Center Horizontal」に変えたら出来ました。
敵のHPバーの不透明度を下げて若干透けるようにしてあります。プレイヤーと重なったら後ろに回る=プレイヤーが常に最前になるようにもしたいです。縁取りもしたいような、ゴチャつくような…
プレイヤーと敵でHPバーの更新のノードが違っています。プレイヤーはビューポートで、敵はレベルの中にいるからCastのノードが必要なのかと考えています。
「JUST!!!」の表示はこちらを参考にしました。

シンプルな文字なので、フォントを追加したいです。
あるいは画像を作ってそれを表示でもいいのかなと思いました。
アニメーションも付けたいです。

床の情報量を増やす

作品紹介動画で繰り返し出てきたワードが「床の情報量を増やす」でした。
影を置くなどやり方は多数あると思うのですが、今回はマテリアルを貼ってみました。
本当は草(Grass)のマテリアルを貼りたかったのですが、そのままだと伸びてしまい見た目が良くなかったのでパインウッドにしています。
マテリアルを細かく貼り付ける方法を調べてみたのですが、基礎知識もないので実現できませんでした。
Cubeに貼り付けるようなことは少ない(あまり想定されていない)のかもしれませんが、今後再挑戦してみたいです。

その他まとめ

作品紹介動画

この動画で興味を持った、気になった点

  • 足元に円形のUI

  • HPゲージ(中央に向かって減っていく)

  • 倒れた時の演出→光の粒子になる、ブラックホールに吸い込まれる(スターレイル風)

  • ノックバック

  • 点群データのマップ

  • ボムを回転切りでばら撒く

  • カットシーンを最初に挟む(名言の引用)

  • 光らせれば綺麗

  • 床の情報を増やす(影を使う)

  • 死因ごとに演出が変わる(攻撃に属性をつけるには?)

  • パリィ(回避)に成功したらスローになる(有利になるご褒美)

  • ヒットストップは敵が増えるとかかりすぎる問題

  • 斬撃を飛ばす

  • スローは不具合の原因になりえる

中級まで解説されている記事

感想

手探りが多く、初級からさらに1週間かかったけどクリアできたのは達成感はありました
それ以上にやりたいことが出来たり、解決策が見つかっていなかったりするので精進したいです。

おわり

今回は以上になります。
次のぷちコンが7月開催予定なのでUQ2などでスキルを上げたいです。
それではノシ

いいなと思ったら応援しよう!