BLOGブログ

2022.03.02UE4UE4/ 初心者向け

[UE4] 落下でプレイヤーにダメージを与える方法

執筆バージョン: Unreal Engine 4.27

こんにちは、ゲームデザイナーの黒田Rです!

最近オープンワールドのゲームが増えてきているので、
オープンワールドでよくある「落下ダメージ」の作り方をご紹介します。


目次

  1. 始める前に
  2. プレイヤーのHP(体力)を作る
  3. 高さに応じてプレイヤーの体力を減らす
  4. 完成!

①始める前に

  • 今回もUE4にある「3人称視点テンプレート」を使います。
  • セーブはこまめに行います!

②プレイヤーのHP(体力)を作る

まずは、ダメージを受けたかどうかがわかるように最低限の体力バーを作っていきます。

  1. プレイヤー(ThirdPersonCharacter)のブループリントを開く
  2. 新たに体力の変数を作る(Healthと名付け、Floatに変更します
    デフォルトの値を1000に設定しておきます(最大体力値)
  3. 画面に表示される体力バーを作るためのウィジェットを作成する(HealthBarと名付けます)
  4. ウィジェットを開き、「ProgressBar」を好きな場所に配置しサイズを調整する

    1. 色は自由にカスタマイズできます(Percentの値を1にすると色が見えます)
  5. 詳細の中にある「Bind」というタブから「+Create Binding」を選択する
  6. 新たに4つのノードを作成し、下記図のように繋げます
    1. ①:「Cast To ThirdPersonCharacter」(元からあった二つに繋げる)
    2. ②:「Get Player Character」(上記のObjectに繋げる)
    3. ③:「Get Health」(追加①のAs Third Person Characterから繋げる)
    4. ④:「÷」(上記からノードを引き、「/」を入力すると出てきます)
      1000の値を入力しておきます(最大体力値)
  7. プレイヤー(ThirdPersonCharacter)のブループリントに戻り、空いているスペースに「EventBeginPlay」を追加します
  8. 画面に作成したウィジェットを移すために下記図のようにノードを作成し繋げます

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


③高さに応じてプレイヤーの体力を減らす

体力が出来たらいよいよ、落下によるダメージを与えるようにします

  1. まず「EventTick」のノードを作成し、下記ノードと繋げます
    1. ①:「Branch」(EventTickと繋げます)
    2. ②:「Is Falling」(CharcterMovementが一緒に生成されます)
    3. ③:「DoOnce」(BranchのTrueから繋げます)
  2. 次に、プレイヤーの落下地点の高さを図るために、「DoOnce」ノードから下記図のように繋げます
    1. ①:「Get ActorLocation」(キャラの現在地を取得)
    2. ②:上記のReturnValueから「SplitStructPin」を選択(高さの座標Zのみ判定するため)
    3. ③:Zの値を変数化(名前を「FallStart」に変更します)
  3. 今度は落下したときの処理を始めるために「EventOnLanded」を作成します
  4. その後の処理を下記の図のようにノードを繋げます
    1. ①:「Sequence」をEventOnLandedからつなげ、Then 0をii.で作成したDo Onceの「Reset」に繋げる(一度地面に着いたら次の計算を行えるようになるため)
    2. ②:ii.で作成した「Get ActorLocation」をコピー&ペーストで複製し、またZの値を変数化(名前を「FallEnd」に変更します)
  5. 落下開始地点と着地地点の高さを計算します
    1. ①:「FallStart」の変数をCtrlキー押しながらドラッグ&ドロップで置きます
    2. ②:「FallEnd」の変数もCtrlキー押しながらドラッグ&ドロップで置きます
    3. ③:FallStartからノードを引き「-」のノードを追加(FallStart – FallEndになるように繋げます)
    4. ④:「-」の出力を変数化します(名前を「Height」に変更します)
  6. 最後に高さの値でプレイヤーにダメージを与えます
    1. ①:ただのジャンプでダメージを受けないように500以上でしかダメージを受けないようにします
    2. ②:「Branch」ノードの「Condition」に上記ノードをつなげる
    3. ③:「Health」の変数をCtrlキー押しながらドラッグ&ドロップします
    4. ④:「-」ノードで体力から高さを引いたダメージ後の体力を計算します
    5. ⑤:「Health」の変数をAltキー押しながらドラッグ&ドロップします(上記で計算したダメージを体力に反映します)

④完成!

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

お疲れ様でした