執筆バージョン: Unreal Engine 4.27 |
こんにちは、ゲームデザイナーの黒田Rです!
最近オープンワールドのゲームが増えてきているので、
オープンワールドでよくある「落下ダメージ」の作り方をご紹介します。
目次
- 始める前に
- プレイヤーのHP(体力)を作る
- 高さに応じてプレイヤーの体力を減らす
- 完成!
①始める前に
- 今回もUE4にある「3人称視点テンプレート」を使います。

- セーブはこまめに行います!
②プレイヤーのHP(体力)を作る
まずは、ダメージを受けたかどうかがわかるように最低限の体力バーを作っていきます。
- プレイヤー(ThirdPersonCharacter)のブループリントを開く

- 新たに体力の変数を作る(Healthと名付け、Floatに変更します
デフォルトの値を1000に設定しておきます(最大体力値)

- 画面に表示される体力バーを作るためのウィジェットを作成する(HealthBarと名付けます)

- ウィジェットを開き、「ProgressBar」を好きな場所に配置しサイズを調整する
- 色は自由にカスタマイズできます(Percentの値を1にすると色が見えます)

- 詳細の中にある「Bind」というタブから「+Create Binding」を選択する

- 新たに4つのノードを作成し、下記図のように繋げます
- ①:「Cast To ThirdPersonCharacter」(元からあった二つに繋げる)
- ②:「Get Player Character」(上記のObjectに繋げる)
- ③:「Get Health」(追加①のAs Third Person Characterから繋げる)
- ④:「÷」(上記からノードを引き、「/」を入力すると出てきます)
1000の値を入力しておきます(最大体力値)

- プレイヤー(ThirdPersonCharacter)のブループリントに戻り、空いているスペースに「EventBeginPlay」を追加します

- 画面に作成したウィジェットを移すために下記図のようにノードを作成し繋げます

これで簡単なものではありますが、体力バーが左上に表示されるようになりました!

③高さに応じてプレイヤーの体力を減らす
体力が出来たらいよいよ、落下によるダメージを与えるようにします
- まず「EventTick」のノードを作成し、下記ノードと繋げます
- ①:「Branch」(EventTickと繋げます)
- ②:「Is Falling」(CharcterMovementが一緒に生成されます)
- ③:「DoOnce」(BranchのTrueから繋げます)

- 次に、プレイヤーの落下地点の高さを図るために、「DoOnce」ノードから下記図のように繋げます
- ①:「Get ActorLocation」(キャラの現在地を取得)
- ②:上記のReturnValueから「SplitStructPin」を選択(高さの座標Zのみ判定するため)
- ③:Zの値を変数化(名前を「FallStart」に変更します)

- 今度は落下したときの処理を始めるために「EventOnLanded」を作成します

- その後の処理を下記の図のようにノードを繋げます
- ①:「Sequence」をEventOnLandedからつなげ、Then 0をii.で作成したDo Onceの「Reset」に繋げる(一度地面に着いたら次の計算を行えるようになるため)
- ②:ii.で作成した「Get ActorLocation」をコピー&ペーストで複製し、またZの値を変数化(名前を「FallEnd」に変更します)

- 落下開始地点と着地地点の高さを計算します
- ①:「FallStart」の変数をCtrlキー押しながらドラッグ&ドロップで置きます
- ②:「FallEnd」の変数もCtrlキー押しながらドラッグ&ドロップで置きます
- ③:FallStartからノードを引き「-」のノードを追加(FallStart – FallEndになるように繋げます)
- ④:「-」の出力を変数化します(名前を「Height」に変更します)

- 最後に高さの値でプレイヤーにダメージを与えます
- ①:ただのジャンプでダメージを受けないように500以上でしかダメージを受けないようにします
- ②:「Branch」ノードの「Condition」に上記ノードをつなげる
- ③:「Health」の変数をCtrlキー押しながらドラッグ&ドロップします
- ④:「-」ノードで体力から高さを引いたダメージ後の体力を計算します
- ⑤:「Health」の変数をAltキー押しながらドラッグ&ドロップします(上記で計算したダメージを体力に反映します)

④完成!
これで500uu以上の場所から落下したときにダメージを受けるようになりました!
お疲れ様でした