Skip to content

strangechu's Blog

  • About me
  • GitHub
  • LinkedIn

strangechu's Blog

Work & Game

[UE4] 使用GameplayAbilitySystem製作Combo

12 月 28, 2021 by strangechu
Combo完成圖

本文從範例專案開始,使用UE4內建的GAS(Gameplay Ability System) plugin製作動作遊戲常見的Combo,UE使用的是4.26版。只有最一開始的準備會用到一些C++,後面實作都是用藍圖完成。

本文以快速達成目的為目標,因此不會講太多關於GAS的細節,若想要詳細研究的可以參照官方文件或是非官方文件。另外也推薦yekdniw前輩寫的文章。

所謂的Combo其實可以做到很複雜,不過本文專注在如何將三個攻擊動畫串成一份基本的普通攻擊Combo,內容包含提前輸入以及動畫接續的調整,內文會詳細說明。

前置準備:專案設定

為了可以使用GAS,需要先做一些專案的設定。以下從範例專案開始說明。

首先使用Third person範例開啟新專案後(MyGASCombo), 啟用Gameplay Abilities Plugin。

進入Plugin管理畫面,啟動後隨著指示重開編輯器。

C++專案設定(MyGASCombo.Build.cs)也記得新增GameplayAbilities和GameplayTags兩項。

接著追加AbilitySystemComponent相關的功能到角色上。為了要在BP側能夠完成接下來的製作,這邊要做些準備工作。以下三點要在C++側先行準備:

1.新增AbilitySystemComponent。角色GAS的處理都透過這操作。
2.新增管理角色擁有技能的列表,並賦予角色能力。
3.新增Tag和移除Tag的功能,用於管理Combo接續。

AMyGasComboCharacter.h

為角色新增AbilitySystemInterface
加入ASC以及待會會用到的能力列表
新增控制GameplayTag的接口

AMyGasComboCharacter.cpp

在Constructor初始化ASC
Override BeginPlay並加入能力的初始化。GiveAbility功能為讓此角色學習某技能。
控制GameplayTag的實裝

修改後確認正常編譯結束後啟動專案,從角色BP確認AbilitySystem有正常追加。

到此,角色已經可以執行GAS,事前準備到此結束。接下來的製作用BP即可完成。

匯入攻擊動畫


https://www.unrealengine.com/marketplace/en-US/product/close-combat-animset
角色動畫來源

這次打算製作左刺拳->右鉤拳->迴旋踢的三連Combo,首先分別匯入需要的動畫之後,各自製作成Montage。

為了讓Montage能夠播放,修改角色的AnimGraph加入DefaultSlot如下圖。

如此Default的Slot的Montage就準備完成可以播放了。
先在腳色上做個簡單的測試看是否Montage能正常播放。

按下Z後動畫正常撥放了。接著我們可以正式進入製作Combo的步驟。

製作第一段Combo

新增一個GameplayAbility名為GA_Combo1


接著在Class defaults中的Tags作以下設定。

這次會用到的是Ability Tags、Activation Owned Tags、以及Activation Blocked Tags。以下就這次用到的Tag作說明。
Ability Tag:此Ability的識別名稱。觸發能力時使用。
ActivationOwnerTags:當此
Ability 執行中時給予擁有者此Tag。用於識別Combo執行狀況。
ActivationBlockedTags:當擁有者擁有該Tag時無法執行。用於防止重複觸發Combo,連打也只會執行一次。

在角色BP新增案件觸發TryActivateAbilitiesbyTag來使用Ability。



在使用之前,不要忘了先讓角色學習該Ability,在我們之前在C++新增的Startup Abilities加入GA_Combo1。

進入遊戲按下Z,如果能夠出拳表示成功了。我們發出了第一個Combo!

雖然看起來跟剛剛播放動畫時一模一樣,不過因為這次是透過GAS播放,我們可以開始管理各種行為了。目前可以注意到的的差別就是,之前連打Z時會一直重複播放攻擊動畫,然而現在我們有前面的Tag管理,不管按幾次都只會觸發一次。

加入第二段Combo

在這邊我們希望製作的Combo流程大概規劃如下圖:

Combo流程示意圖

最常見的Combo設計中,玩家是可以做出所謂先行輸入的動作。意思就是在指定的時間內輸入攻擊後根據輸入的時間,會立刻,或是在特定時間點時做出下一段攻擊。以左刺拳接續到右鉤拳的過程為例,如圖,若在[可輸入範圍]期間按下攻擊鍵,則會在[可進行下段攻擊]期間開始進行下一段攻擊。

要達成這個目的,我們必須使用GameplayTag控制Combo狀態,以及配合AnimationNotify來做調整。以下為詳細步驟。

這邊我們使用MontageAnimationWindow這個AnimationNotify。這可以在GameplayAbility中接受到通知並且做出相應的動作。在左刺拳的Montage中追加並且在NotifyName設定以下標籤。
ComboInput:代表上圖的[可輸入範圍]
ComboBranch:代表示意圖的[可進行下段攻擊]

這邊大概調整在拳打出時可以接受輸入,在拳稍微收回時進行下段攻擊。
接著我們修改GA_Combo1決定接受通知後的行為。

如上圖,若播放到Montage的通知,在PlayMontage後的OnNotifyBegin和OnNotifyEnd接續處理。在這邊根據收到的通知,在期間內分別新增相對的Tag到玩家,以準備下個Combo的處理。

這邊也要處理沒有按下下段攻擊的情況,在技能結束後清除Tag。

接著我們新增第二段攻擊的Gameplay Ability。

內容如下

這邊觸發技能後,我們不是直接播放動畫,而是使用WaitGameplayTagAdd來等待指定的GameplayTag被新增時才播放。這邊設定為AbilityBranch.Combo2。

接著在Class Defaults加入以下設定。

條件如此設定,便能達成在特定時間可輸入,並且在特定時間播放的功能了。

最後別忘了在角色上加入Combo2的能力。

進入遊戲測試,在第一段攻擊後再次按下攻擊

成功打出第二段Combo,可喜可賀!

加入第三段Combo

和第二段Combo使用同樣的要領,就能無限的增加Combo。每次新增的流程再次整理如下:

  • 新增前次連段Montage的AnimationNotify
  • 新增前次連段Ability的Tag追加/刪除處理
  • 新增Montage
  • 新增GameplayAbility
  • 新增該技能至角色

最終結果

以下是最後完成的三段combo影片,操作是純粹的Z連打。

Post navigation

Previous Post:

[UE4] 真正的全文搜尋: Asset Search Plugin

Next Post:

個人遊戲月報 2021年12月

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

近期文章

  • 從《33遠征隊》看日本遊戲業的未來——JRPG的蛻變與停滯
  • 機戰傭兵6 玩後感
  • 沉沒意志 玩後感
  • Fallout影集觀後感
  • [CEDEC2024]薩爾達的餘料建造開發減法

近期留言

  • 「strangechu」於〈個人遊戲月報 2020年8月〉發佈留言
  • 「扇」於〈個人遊戲月報 2020年8月〉發佈留言

彙整

  • 2025 年 5 月
  • 2025 年 1 月
  • 2024 年 9 月
  • 2024 年 8 月
  • 2024 年 5 月
  • 2024 年 4 月
  • 2024 年 3 月
  • 2024 年 1 月
  • 2023 年 12 月
  • 2023 年 11 月
  • 2023 年 10 月
  • 2023 年 8 月
  • 2023 年 6 月
  • 2023 年 5 月
  • 2023 年 4 月
  • 2023 年 3 月
  • 2023 年 1 月
  • 2022 年 12 月
  • 2022 年 10 月
  • 2022 年 9 月
  • 2022 年 5 月
  • 2022 年 3 月
  • 2022 年 2 月
  • 2022 年 1 月
  • 2021 年 12 月
  • 2021 年 10 月
  • 2021 年 3 月
  • 2020 年 12 月
  • 2020 年 11 月
  • 2020 年 10 月
  • 2020 年 8 月
  • 2020 年 7 月
  • 2020 年 3 月
  • 2020 年 2 月
  • 2019 年 7 月
  • 2019 年 4 月

分類

  • Career
  • Game
  • Game Review
  • Monthly Report
  • UE4
  • UE5
  • Uncategorized
  • 技術
  • 演講心得

其他操作

  • 登入
  • 訂閱網站內容 RSS 資訊提供
  • 訂閱網站留言 RSS 資訊提供
  • WordPress 台灣繁體中文
© 2025 strangechu's Blog | WordPress Theme by Superbthemes