UE4
UnrealEngine
UnrealEngine4

UE4のBluePrintだけで壁蹴りを実装する

UE4のBluePrintで壁蹴りを実装してみましょう。

不思議なことに、日本語でUE4の「壁蹴り」「壁ジャンプ」と調べても出てこなかったので書きました。

壁蹴りの仕組みは自分が自作しているゲーム、ユニティちゃん&グレイちゃんの次回体験版バージョンの基本機能として入れているものを、そのまま載せています。

fee74a95-70bb-48bb-7235-08d5fce18c31.png

実装にあたり、以下のフォーラムを参考にしています。

[Blueprint] Wall Jump fail

※「UE4 Wall Kick」と検索すれば他のも出てきます。


前提条件

今回記載する壁蹴りのシステムは、「3d」のSide Scroller Templateを使用しています。

ロジックはBluePrintのみです。

今回はTraceを利用する方法で壁検出を実装します。

→Traceが重くてイヤ、という人は壁にオーバーラップ用のコリジョンを張り付けて判定する等、いろんな方法があるので調べてみてください。


壁蹴りの処理の流れ

今回実装した壁蹴りの処理は大まかに以下の通りです。

1.空中でジャンプのボタンを押す

2.キャラの少し上方向に半径50のSphereTraceを実行

3.WorldStatic、もしくはWorldDynamicがTraceで検出されたら、Launch Characterノードを実行


①SphereTraceForOBjectでの壁検出

まず、壁判定用の関数を作成します。

SideScrollerCharacterという名前のBluePrintクラス(またはCharacterを継承したクラス)を開き、以下の画像のように関数を作成します。

wallkick4.png

処理の流れとして、GetActorUpVectoerに100をかけた位置に、半径(Redius)50のSpherTraceForObjectsを実行して、WorldStatic、WorldDynamicを検出するという内容になっています。

操作キャラクターよりも若干高い位置にすることで、地面のWorldStatic、WorldDynamicを検出するのを防いでいます。

SpherTraceForObjectsのDrawDebugTypeにFor Durationが選択されていますが、これはデバッグのためにTraceを画面に表示させているだけです。

wallkick5.png

デバッグ以外で画面に表示させる必要性はないので、リリースするときは必ず以下の通りDrawDebugTypeをNoneに指定してください。

image.png

これで壁検出ができました。


②壁蹴り(壁ジャンプ)用の関数を作成

以下のように、ジャンプ用の関数を作成します。

image.png

CharacterMovementにあるisFallingでキャラクターが空中にいるか否かが取れます。

もし、地上にいる場合は、CharacterのJump関数でキャラクターにジャンプさせます。

空中にいる場合は、①で作成した関数(画像の場合、純粋関数となっている「Detect Wall」の部分)を呼び出して壁があるか判定し、もし壁があった場合はLaunch Characterを呼び出して斜め上の方向にキャラクターを若干飛ばしています。

※Launch Characterの詳細は公式ドキュメントを見てください。


③Jumpのインプットアクションイベントに、②で作成した関数を呼び出す。

以下のように、Jumpのインプットアクションに②で作成したジャンプの関数を呼び出します。

walljump2.png

これで壁蹴りが実装出来ました。

この状態で壁の近く、かつ空中に居るときにジャンプボタンを押すと、以下のGifのように斜め上方向に壁蹴り(壁ジャンプ)すると思います。

wallkick.gif


まとめ

というわけで、方法さえわかれば割と簡単に、かつ汎用的に使える壁蹴りの仕組みが出来ました。

壁蹴り、壁ジャンプをUE4で実装したいという人は参考にしてください。