UE5初心者が①ジャンプパッド・②拾うと移動速度が上がるバフアイテム・③マップ環境ダメージ・④ヒールパック・⑤死亡&リスポーン機能の作り方を調べてまとめてみた!
(地味に分かりづらい「操作キャラへ判定用タグを追加する方法」も解説しておくぜ!
全部5.3.2での作成方法だからバージョンが違う人は要注意)
- ◆操作キャラに判定用タグを追加する方法
- ◆「乗るとプレイヤーがハイジャンプ」する環境ギミック
- ◆「拾ったら移動速度がアップ」するバフアイテム
- ◆「特定のレベル内だけ」常時継続ダメージ(DoT)を受ける
- ◆ヒールパック(回復パック)の作成方法
- ◆プレイヤー死亡時に初期地点でリスポーン
- ◆その他
▼本文は「続きを読む」からどうぞ~!
◆操作キャラに判定用タグを追加する方法
- 「BP_ThirdPersonCharactor」などの操作キャラBPを開く。
- ビューポート左上の[Components]欄トップにある「BP_ThirdPersonCharactor(Self)」を選んだ状態で、右側[Details]欄上部の検索欄に「tag」と打ち込んで検索する。
- [▼Actor]>[▼Advanced]>[▼Tags]の右端にある[+ボタン]を押したら、空欄に好きなタグ名(playerなど)を入力する。
※これでアクターに条件判定用のタグが追加できるはずだ。
◆「乗るとプレイヤーがハイジャンプ」する環境ギミック
▲トランポリン/ジャンパ作成時の参考動画(日本語)。
- 上の動画では、プレイヤーがアイテムを拾ったかどうかの条件判定に[Get Player Pawn]と[==]を使っている。
- あらかじめ操作キャラにタグ付けしておくと、[Actor Has Tag]ノードだけで条件を判定できる。
(海外動画だと拾う系のアイテムはHas Tagノードを使っている人が多いかも?)
▲①[Fullscreen]クリック>②全ノードをドラッグで選択>③Ctrl+Cからコピー>④UE5上でCtrl+Vを押すとコピペ可能(全画面を閉じる時はESCで!)。
◆「拾ったら移動速度がアップ」するバフアイテム
▲移動速度アップブーツの参考動画(英語)。
[Actor Has Tag]ノードで接触判定後、[Max Walk Speed]をセットすれば移動速度上昇効果が得られる。
- 移動速度アップアイテムは、アイテム取得直後にセットする移動速度の値を"0"へ変えるだけで「触ったら麻痺/フリーズ/移動を停止する妨害アイテム」にもなるので便利!
▲スピードアップ(5秒バフ)アイテムのコピペ用。
途中で消している2つのコンポーネントはcollision(当たり判定)とmesh(外観)。
※この2つをDestroyActorでまとめられるかと思って試したらバグったので注意。
▲パラライズ(5秒デバフ)アイテムのコピペ用。
※スピードアップアイテムの移動速度を"0"に下げただけ。
同じく、移動速度を"200"程度に下げれば、「スロートラップ」としても使える。
(ちなみに[BP_ThirdPersonPlayer]だと初期移動速度は"500"なので、迷ったら500を基準に調整すると良いぞ!)
- 【参考記事:ランダムな範囲内にアクターを生成&削除する方法】と合わせれば、一部のエリア内でだけバフ/デバフアイテムやトラップを自動生成できるかも?
- 【実際にゲーム内で作ったアイテムをランダム出現させる方法まとめ】
◆「特定のレベル内だけ」常時継続ダメージ(DoT)を受ける
今回は、ゲームの難易度を上げるため「特定のマップに居る時だけプレイヤーのHPが毎秒減り続ける」という仕組みを作った。
※「砂漠エリアや雪原エリアなど特定のマップに入った時だけ毎秒継続ダメージ(DoT)を受ける」という、モンハンやパルワールドみたいな環境ダメージシステム。
①与ダメ側の「Apply Damage」設定
レベルBPの[Event Begin Play]から[Set Timer by Event]で1秒ごとに[Apply Damage(与ダメイベント)]を繰り返す。
- タイトル画面でHPが減らないよう、[Apply Damage]の前に[Branch]を入れる。
- Branchの条件判定に[Get Current LevelName]と[==(Stringカテゴリ)」を使う。
(※現在のレベル名=事前に設定したレベル名の時だけ、与ダメイベントを実行)
▲レベルBPに作る与ダメの部分。今回は1秒あたりHP-3のDoT。
※レベルの名前欄は、エリアダメージを発生させたいレベルの名前と一致させる。
②被ダメ側の「Any Damage」設定
プレイヤーBPに[Any Damage]を追加し、レベルBP上の[Apply Damage]から送られる継続ダメージ値を受け取る。
あとは【プレイヤーHP(変数)】―【受け取った継続ダメージ値】の引き算をするだけ。
▲プレイヤーBPに作る被ダメの部分。
※この処理後、HPバーのUIをプレイヤーHPに合わせて更新し、さらに死亡時のカスタムイベント(ラグドール化やゲームオーバーUI表示など)も追加すると良さそう。
③補足
今回は「特定のレベル(マップ)だけ継続ダメージを受ける」という仕様にしたけど、大きいCollision付きのアクターに[Apply Damage]ノードを仕込めば、小範囲だけ継続ダメージを受ける仕様にもできるはず。
さらに、そういったアクターを動かせば、移動しながら周囲へ継続ダメージを与えるイベントやモンスターも実装可能だと思う。
(Spline機能でアクタを巡回させたら面白いかも…!)
- 継続ダメージの作り方は多かったけど、環境によるスリップダメージを作る方法が意外とネット上に見当たらなかったので、参考までにまとめてみた。
◆ヒールパック(回復パック)の作成方法
▲ヒールパック作成の参考動画(英語)。
▲ヒールパックのコピペ用①(ヒールパックBP)
▲ヒールパックのコピペ用②(プレイヤーBP)
◆プレイヤー死亡時に初期地点でリスポーン
死亡&リスポーン機能の実装方法は、上の日本語記事を読んで真似するのがオススメ!
(※もちろんGorka氏もリスポーン動画を投稿してるけど、この記事の方が簡単だった)
①ゲームモードBP側にリスポーンイベントを作成
②プレイヤーBP側に死亡イベントを作成
▲このカスタムイベントをbranchで死んだ時(PlayerHP≦0の時)だけ実行すれば、あとは勝手に初期地点へリスポーンできているはずだ。
【死んだ後にメニューが表示され続けるバグの解決方法】
- 前述のプレイヤーBPでリスポーン処理をさせると、ESCメニューなど(いわゆるウィジット)を開いたまま死んだ時、メニューが消去されないまま残ってしまう。
- これは、メニューとして表示中のUIを全部消去するノード「Remove All Widgets」を、プレイヤーBPの「Do Once」直後(=死亡イベント開始直後)に書いたら解決した。
好きなタイミングで表示中のメニューを全消去するノードは、とても使用頻度が高そうなのでちゃんと覚えておきたい!
- 【ウィジェット非表示/表示方法のまとめ】
- プレイ画面で表示中のメニューを全部消すためのノードは「Remove All Widgets」。
- プレイ画面で表示中のメニューを部分的に消すためのノードは「Remove from Parent」。
(ノード内で指定したUIだけが親UIから外される=つまり非表示になる。
非表示とは逆に、特定のUIだけ表示したい場合「Add Child」を使う)
◆その他
- 最後まで読んでくれてありがとう!
- 操作キャラ名・ゲームモード名・効果音名はテンプレ通りじゃないので要注意。
- できるだけ上級者が発信している情報を調べてまとめたけど、初心者なので間違いや解釈違いがあったらごめん…!