Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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で実装したいという人は参考にしてください。

YuukiOgino
元ソシャゲーのおくりびと。 こちら知人のサイトです。SESに特化したエンド直高単価案件サイト: https://zob.zooa.co.jp/?utm_source=qiitao&utm_medium=social
http://oginoyuki.wp.xdomain.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away