2016年6月26日 星期日

Unreal: Collision > Damage

since: 2016/06/26
update: 2016/06/26

reference:
1. Unreal Engine 4 Documentation | Unreal Engine

A. 新增專案
    1. New Project > Blueprint > First Person:
        > Desktop / Console  > Maximum Quality > No Starter Content
        > Folder ... > Name ... > Create Project

    2. 調整右前方的黑色大牆: (原名為 BigWall2)
        > 名稱改為: Enemy
        > 勾選: Simulation Generates Hit Events
        > Collision Presets: 選取 BlockAll

    3. 建立 EnemyBlueprint:
        > 選取 Enemy
        > "Blueprint / Add Script"
        > "Create Blueprint"

    4. EnemyEvent Graph:
        > 新增 Event Hit Node
        > 從 Event Hit Node 的 Hit Pin, 連結 Break Hit Result Node
        > 新增 Apply Damage Node
        > 將 Event Hit Node 的 Exe Pin, 連結 Apply Damage Node 的 Exe Pin
        > 將 Event Hit Node 的 Other Pin,
          連結 Apply Damage Node 的 Damaged Actor Pin

-----------------------------------------------------------------------------------------------

B. Character Blueprint:

    1. 開啟 FirstPerson Character Blueprint:

    2. 在 Event Graph 裡, 新增 Event Anydamage Node, 並新增變數: Health 

   > Health 變數的型態為 float, 預設值為 100.0

    3. 印出剩餘的生命點數
        > 藉由 float 減 float node 取的剩餘的生命點數(Get Health 減去 Damage pin 的值)
        > 再將 剩餘的生命點數 (float 減 float node 的輸出 pin) 設(Set)給 Health
        > 最後將結果印出來.

    4. 結果:
        當玩家碰撞到 Enemy 時, 生命值持續快速遞減

-----------------------------------------------------------------------------------------------

C. 讓玩家半秒內只會受傷一次
    1. 修改 FirstPerson Character Blueprint:
        > 新增 DoOnce Node 與 Delay Node
        > DoOnce Node 預設只會作一次(執行 Set Health)
        > 在列印出剩餘生命值後, 會先 Delay 5 秒, 然後 Reset DoOnce Node
        > DoOnce Node 於 Reset 後, 又可以執行一次了.(依此循環)

    2. 結果: 當玩家碰撞到 Enemy 時, 生命值半秒內只會扣一次(10 點)


-----------------------------------------------------------------------------------------------

D. 當玩家生命值小於或等於零時, 就消失
    1. 新增 Node: float <= float , Branch, DestroyActor
        > 取得 Set Health 的生命值, 來作 Branch 處理
        > 如果生命值小於或等於 0, 就執行 DestroyActor
        > 如果生命值大於 0, 就印出數值 (並且 Delay -> Reset DoOnce ...)

    2. 結果: 當玩家碰撞到 Enemy, 生命值小於或等於 0 時, 玩家就消失了(destroyed)

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。