Meiryo’s blog

やってみて詰まったことを備忘録として残すブログ

アンリアルクエスト5の備忘録(1日目、2日目)

先日アンリアルクエスト5に参加いたしました。

提出したゲームはこちら www.youtube.com

エスト全制覇が目標だったのですが「敵の攻撃を弾く」のみ
時間が間に合わず実装できませんでした。
しかし、その他に得られたものが多かったので良しとします。

そんな得られたものを忘れても思い出せるように
今回行ったことを記しておきます。

1日目

敵を倒せるようにしよう

武器はStatic Meshを替えるだけでいろんなものを
使えるようにするためPlayerとEnemyから取り外し、
BP可しました。
そしてこのBPにCollisionを切り替えるEventを作成しました。

このEventはAnimation Montage再生中に
Anim Notify Stateで呼び出します。

これでAnimationがこの通知の最初の部分まで再生されたら
Collisionが発生、最後の部分まで再生されたら
Collisionが無くなるようになりました。

あとは武器BPにActorBeginOverlapを作成し
「当たったものが敵だったらダメージを与える」処理を追加することで
敵を倒せるようになります。

ちょっとした工夫

PlayerとEnemyにBaseCharacterという
共通の親を設定してClass Is Child Ofで判別しています。

問題点

武器をBP可し味方も敵も共通の武器BPを使って
攻撃を行うようにしたのですがこのことにより
TagやCollisionの設定で攻撃した相手を判別することが
難しくなってしまいました。

例えば「武器は敵に当たり、自分に当たらないようにする」は
敵にTagを設定し、武器のCollision設定を「Object TypeがPlayerの場合無視する」
などをすれば良かったのですが

武器を共通化したためこれだと敵の攻撃がPlayerに当たらなくなります。
また、敵の攻撃がPlayerに当たらなくなります。

こういう事が起こり、条件分岐が多くなってしまいました。
これはいつかなにか踏みそうな気配がするので
良い方法がわかったら追記かまた記事を書くと思います。

参考

剣で攻撃を実装する方法【UE5】UE4でも可 - YouTube

敵に死亡演出を付けよう

死んだらMeshComponentに対して
SetCollisionEnabledでCollisionを有効にし
SetSimulatePhysicsで物理シミュレーションを
行うようにしました。

参考

  • 極め本

ビヘイビアツリーを使って敵を賢くしよう

PawnSensing Componentを使って
「プレイヤーを見つけたら近寄り攻撃、見つけていない場合は
ランダムに歩きまわる」等の処理をしています。
行っていることは先程貼ったこちらで学んだことほとんどそのままです。

プレイヤーを見つけたり、プレイヤーに攻撃されたら
「プレイヤーを見つけていない処理を中断する」ということを
行っているのですがそのことは別の記事にまとめました。

ちょっとした工夫

別のBPの近接攻撃をしてくる敵と
遠距離攻撃する敵が居るのですが

AttackEventを持たせた親を継承することで

1つのタスクで攻撃を呼び出しています。

2日目

敵を全滅させたら勝ち

勝ち負けの判定処理はGameModeBPに持たせました。

「クリアまでに倒す必要のある数」の値を設定して 敵が死んだらこの数から引きます。

このEventは敵が死んだら敵のBPから呼び出すようにしました。

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

こちらを元に作りました。

敵の種類をEnum型で持ち

例えば「Bomb」を指定したら「Bomb Enemy」のClassとBTを取得して
Spawn AIFrom Classに渡し、Spawnするということをしています。

取得の方法はこちらの記事

ちょっとした工夫

Spawnする数の上限をEnum型をキー、Int型を値にした
Mapで設定できるようにしていて

「Spawnしている敵の数が上限でなければSpawnする」という
処理をしています。

この処理を行うには「Spawnしている敵の数」の情報が必要です。
情報を取得するのに一番楽な方法はGet All Actors Of Classを使う方法ですが
重そうな処理なので避けました。

代わりにSetを用意して

SpawnしたらSetに追加して敵の数を把握するようにしました。

また敵BPに死んだら呼び出すEventDispatcherを作っておき、

SpawnerでSetの要素を削除するイベントをBindしています。

これで敵の数を管理できるようにしました。

問題点

下図はSpawnerBPのEvent Graphなのですが
1種類敵が増える度に赤枠の部分が増えます

SetやSpawn時間間隔の変数も増えるようになっており

とてもひどいものとなっております。

いい感じにデータをまとめてすっきりさせたいのですが
今はまだ方法がわからないのでこちらも分かり次第
記事を書くと思います。

敵にHPをつけよう

次の記事の「プレイヤーのHPが削られたら負け」にまとめます。