UE5初心者が「クールダウン付きのステップ回避を作る方法」と「ジャスト回避っぽくステップ開始時に無敵時間を追加する方法」について調べてまとめてみた。
▼本文は「続きを読む」からどうぞ~!
◆ステップ回避の作り方動画(必見)
▲「クールダウン付きダッシュ(≒短距離ステップ)の追加方法」を解説している動画。
1番簡単な実装方法なので、初心者にオススメ。
【復習用メモ】
- 上部ツールバー[Edit]>[Input]>[▼Action Mappings]右の[+]ボタン>[Dash]を作成>左シフトキーに割り当てる。
- プレイヤー[BP_ThirdPersonCharacter]にBoolean型変数「IsDashing」を追加。
※初期値(偽)のまま追加する。下線部は各自で好きに命名&キーバインドしてね!
▼[BP_ThirdPersonCharactor]のイベントグラフを編集する。
[BP_ThirdPersonCharactor]のビューポート>左上[Character Movement(Char~)]選択>右側[Details]欄>[①[Use Separate Braking Friction]=オフ、②[Falling Lateral Friction]=[5]へ変更。
※[①≒ブレーキの摩擦演算]は地表での横滑り防止のために無効化、[②≒落下時の横方向の摩擦係数(空気抵抗)]も落下中に慣性で吹っ飛ぶのはおかしいから上げる。
【補足】
- [Get Velocity]ノード
現在の速度を取得する。 - [Launch Character]ノード
プレイヤーなどをノックバックさせる時(吹き飛ばす時)に使う。
※入力の[Launch Velocity]によって、吹き飛ばす方向~吹き飛ばす時の速度(パワー)を変更できる。
ちなみに、本格的なゲームを作る場合、他の攻撃手段との兼ね合いもあるので「GAS(Gameplay Ability System)」という機能を覚えた方が良いようだ。
(ただし、この機能はC++必須の上級者向け機能らしく、覚えるまで時間がかかりそう)
- 戦闘メインじゃないミニゲーム程度の規模なら、今回紹介した超お手軽なステップ機能でも十分だと思う。
◆短時間の無敵判定を追加して「ジャスト回避」っぽく
ステップ回避が意外と楽に実装できたから、今度は使用直後に無敵判定を追加して「ジャスト回避」が狙えるようにしていく。
①テスト用の与ダメアクター【BP_DamageCube】を作る
ビューポートの[+Add]から[Cube]と[BoxCollision]を追加し、レベル上へ配置。
▼イベントグラフから与ダメージ用ノード[Apply Damage]を追加する。
※テスト用なので、[Apply Damage]からダメージ判定を送れるBPなら何でもOK!
今回は、「プレイヤーが箱と接触する度に10ダメージ受ける」テスト用BPを用意した。
②【BP_ThirdPersonCharacter】を編集
プレイヤーのBPにFloat変数「HP」「Damage」とBoolean変数「IsInvincible?(初期F)」を追加する。
▼イベントグラフを以下のように編集する。
- ダメージ受信用ノード[Any Damage]の手前部分へ、Boolean変数(無敵状態判定用の変数)で分岐処理を入れれば、楽に無敵状態が表現できる。
- 無敵の時(T)は、[Any Damage]を実行しない。
(ノーダメージ=無敵。ただし、0ダメの状態異常やノックバック効果は受ける) - 無敵じゃない時(F)は、[Any Damage]から通常通り被ダメージ計算を行う。
ジャスト回避の成否判定はやってないので、ジャスト回避成功時に音やエフェクトを発生させたい場合、別の作り方を選ぼう。
あくまで「ステップ開始後の0.3秒間はダメージを一切受けない」という仕組みに変えただけだから、ジャスト回避と呼べるか微妙な作り方になってしまった。
ただ、ジャスト回避の楽しさって大半は「タイミングよく回避してノーダメージ化を狙う」という部分から生まれるものだと思うし、偽物のジャスト回避でも無いよりはマシ…なのかも!
- 念のため[Event Beginplay]後に、毎回[IsInvincible?]をOFFに上書きしておいた方が安心?
(無敵中に強制終了した時、再開した後どうなるかが分からない)
【おまけ】無敵状態になれる「スター」系バフアイテム作成
ジャスト回避を作ったついでに、マリオの「スター」のような触ったら10秒ほど無敵状態になれるバフアイテムも作ってみた。
まず、ビューポートの[+Add]から[Cone]と[BoxCollision]を追加し、レベル上へ配置しよう。
(ConeはStaticMeshなら何でもOK。スターやハートに変えるとそれっぽいかも!)
▼イベントグラフを以下のように編集する。
※DestroyComponentの部分には、左上からアクターのコンポーネント(StaticMeshやBoxCollisionなど)をドラッグして繋げておく。
最初、DestroyActorを入れた時は消滅以降の処理がうまく実行されなかったけど、DestroyComponentに変えたらちゃんと実行してくれた。
Cast toを使わずにBPIで実装するパターンも今度試してみたい。
◆後で学びたい発展編
▲ステップにアニメーションを付ける場合、この3分動画が参考になりそう。
▲本格的な無敵の表現にはGateノードを使うらしい。
▲ジャスト回避のモーションや成功時の演出まで加えたいなら、この動画が参考になるかも…?