「Vtuberの雑学メモ帳」

注目ゲームの攻略記事&VTuber関係の記事をまとめる趣味100%の雑記ブログ。※少年Vtuber「不断シエル」と姉が運営しています。

【UE5】「Set Timer by Event」を中断する方法/キャラ周辺の範囲だけランダムに攻撃

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]なら、プレイヤー周辺の正方形範囲内にだけイベントを発生させられる。

どれも便利そうなノードだから、早めに覚えられて良かった…!!