UE5初心者が「Set Timer by Eventを中断する方法」と「キャラ周辺の範囲だけランダムに攻撃するギミックの作り方」についてまとめてみた!
▼本文は「続きを読む」からどうぞ~!
◆参考記事
◆復習用メモ
今回実装したいもの➡「エリア爆撃イベント」
- プレイヤーの周辺エリアをランダムに爆撃するような妨害イベント。
- 2秒に1回攻撃する(最大5回まで)。
- 爆発に当たったプレイヤーは1回あたり15ダメージを受ける。
①BPI「BPI_TroubleEvent」を作る
ブループリントインターフェース「BPI_TroubleEvent」を作成し、[▼FUNCTIONS]欄に「Fire」も作成する。
②アクターBP「BP_Fire」を作る
アクターBP「BP_Fire」を作り、ビューポート左上[+Add]から[BoxCollision]と[CascadeParticleSystemComponent]を追加する。
ParticleSystemの[Template]項には、[P_Explosion]など好きなエフェクトを入れる。
▼ノードを以下のように編集する。
※上[ClassSettings]ON>右[Implemented Interfaces]から[BPI_TroubleEvent]指定。
左下[▷INTERFACES]の[Fire]をダブルクリックでイベントグラフへ配置。
※[Add Custom Event]から[FireLoop]を追加。
③プレイヤーBP「BP_ThirdPersonCharactor」を作る
[Get Actor Of Class]で[BP_Fire]の参照を取得し、[Message(Fire)]ノードからBPIへ発信する。
▼テストするだけなら[Event Beginplay]または[好きなキー]>[Message(Fire)]でOK。
※爆撃が発生する範囲を広げたい時は[Random~]ノード内のX値とY値を上げる。
(上手く動かない時はBox Collisionの大きさも要確認)
自分は[Set Timer by Event]+[Random Integer]+[Switch on Int]の後ろでBPIへの通知を発信するつもりだ。
▼前回作った霧の妨害イベントに続き、これが2種類目の妨害イベントになる予定!!
◆覚えたノードまとめ
「Clear and Invalidate Timer by Handle」
- Delayと併用すれば、指定秒数後に「Set Timer by Event」を中断できる。
「1秒に1回処理を行って10回ループしたら中断」という処理にする場合、間に挟むDelayの秒数をぴったり[10]に設定したら9回しか爆発しないので注意。
10.1秒にすればちゃんと10回爆発してループが中断される。
「Is Overlapping Actor」
- オーバーラップしてる(Collisionと重なってる)アクターを調べて分岐条件にするためのノード。
- [Target]ピンに重なりを検知する側の情報を入力。
[Other]ピンに重なりを検知したい対象(プレイヤーなど)の情報を入力。 - 入力情報が一致すればTrue(真)を返し、一致していなければFalse(偽)を返す。
[On Component Begin Overlap]だとノード間へ挿入できないので、処理開始後にBP同士の重なりを検知したい時はこれが良さそう!
「Random Point in Bounding Box」
- 対象(Center)を中心とする正方形範囲内の座標をランダムに取得するノード。
- 正方形範囲の大きさは[Half Size]欄から指定する。
[Get Player Character]+[Get Actor Location]+[Random Point in Bounding Box]なら、プレイヤー周辺の正方形範囲内にだけイベントを発生させられる。
どれも便利そうなノードだから、早めに覚えられて良かった…!!