連擊系統

需求

可透過 輕 - 輕 - 重攻擊 等不同順序 產生不同的連擊組合

採用 「狀態機 (State Machine) + Data Asset」 的思維來建構這套系統。

1. 使用 Data Asset 定義連擊樹

不要把連擊邏輯寫死在藍圖裡。建立一個名為 PrimaryDataAsset 的類別,定義每一招的屬性:

  • AnimMontage: 要播放的動畫。

  • NextCombos: 一個陣列或 Map,根據輸入(輕攻擊/重攻擊)導向不同的下一個 Data Asset。

2. 核心邏輯:動態路徑切換

當玩家按下按鍵時,我們不再只是 ComboCount + 1,而是根據當前所在的「節點」去尋找路徑。

邏輯流程:

  1. 當前狀態 (CurrentNode): 紀錄目前正處於哪一個 Data Asset 招式。

  2. 輸入檢查:

    • 按下 L (Light) -> 檢查 CurrentNode->NextCombos 裡面有沒有對應 L 的招式。

    • 按下 H (Heavy) -> 檢查有沒有對應 H 的招式。

  3. 跳轉與執行: 如果找到對應招式,則將 CurrentNode 更新為該招式,並播放其 Montage。

實作

第一步:定義 Data Asset 結構

首先,你需要一個 Struct 來定義「輸入與招式的映射」。

  1. 建立一個 Structure,命名為 S_ComboBranch

    • InputType: Enum (Light, Heavy)

    • NextCombo: Data Asset (你的連擊內容) 藍圖定義完再填入

第二步:先建立一個「藍圖類別」定義結構

你不能直接從選單選一個 Data Asset 就開始用,你得先告訴 Unreal 你的連擊資料長什麼樣子。

  1. 在 Content Browser 右鍵 -> Blueprint Class。

  2. 在搜尋欄輸入 PrimaryDataAsset 並選取它。

  3. 建立欄位 NextBranches 是 array

第三步: 建立 Data Set

  1. 在 Content Browser 右鍵 -> Miscellaneous (雜項) -> Data Asset。

  2. 關鍵點: 這時彈出的視窗會問你要基於哪個 Class?請選擇你剛才建立的 BP_ComboNode_Base

  3. 命名為 DA_Punch_L1 (左拳第一下)。

  4. 我建立了三種動作 左右拳 跟踢擊

第四步: 建立 Character Blueprint

  1. 建立三個變數

    • CurrentComboNode 存放下一個動作的動畫以及可使用的 combo

    • QueuedInput 下一個輸入

    • isAttacking 判斷是不是正在攻擊 正在攻擊需不能移動等 判斷

  2. 建立兩個輸入代表輕重攻擊

  3. 沒有動作時直接分配動畫並執行

  4. 當有連擊時動畫運行到 notify 時檢查符合 QueuedInput 的動畫

Last updated