Unity 游戲中的戰(zhàn)斗系統(tǒng)的架構與設計
很多剛開始做游戲的小伙伴感覺戰(zhàn)斗系統(tǒng)是一個比較麻煩的部分,不知道如何設計,角色很多,職業(yè)很多,技能有好幾種,還有裝備相關的東西。今天這篇文章詳細的講解一個戰(zhàn)斗系統(tǒng)應該如何架構與設計,你看完并搞懂它,戰(zhàn)斗系統(tǒng)的架構與設計對你來說再也沒有難度了。首先我們先來上一張架構圖:

如圖,我們把整個的戰(zhàn)斗系統(tǒng)分成了3個層次,分別為功能組件層, 策略層, 行為決策層。
我們的戰(zhàn)斗系統(tǒng)將圍繞這這3個層次參考設計,接下來我們具體的分析每一層是做什么的,哪些代碼應該放到哪一層,如何實現(xiàn)。
1: 功能組件層
功能組件層顧名思義就是實現(xiàn)某個具體功能的組件,如
角色移動組件: 控制角色的移動與行走;
動畫狀態(tài)機組件: 控制角色的狀態(tài)與動畫切換;
攻擊傷害計算組件: 提供機制,按照技能的特性來提供計算傷害的時機與結束狀態(tài)重置的時機,不提供具體的傷害計算的方法,只提供計算的機制;
尋路導航組件: 控制角色的尋路與行走;
……
這個層次的組件代碼在不同游戲里面大部分都可以重用??偨Y一個點就是凡是戰(zhàn)斗中屬于角色的功能組件的就實現(xiàn)在這個層次,同時這個層次只提供機制,不提供具體的策略。什么叫提供機制不提供策略,舉個具體的例子,比如導航組件,設計的時候就只要按照路徑去走就可以了,具體路徑是哪些,怎么來。它不關心。又如動畫狀態(tài)機組件,只提供功能,根據(jù)用戶給的狀態(tài)來播放正確的動畫就可以了,不大去關心什么時候用什么狀態(tài),這個就是功能層的只提供機制不提供具體策略。

2: 行為策略層
看戰(zhàn)斗的行為策略層如何設計之前先看下戰(zhàn)斗單元,常見的戰(zhàn)斗單元有:玩家, Boss, NPC,小怪等。每個戰(zhàn)斗單元都會有自己的戰(zhàn)斗策略,比如,攻擊,行走等。在這一層,我們主要實現(xiàn)怪物角色的具體的一個戰(zhàn)斗的策略,比如玩家具體實現(xiàn)攻擊,技能的具體策略。比如敵人小怪,提供搜索玩家的策略(具體如何搜索),提供發(fā)起攻擊的策略(具體如何攻擊,每種攻擊一種策略,并封裝成接口),提供發(fā)起追擊的策略(具體如何追擊,封裝成接口)。
我們可以把戰(zhàn)斗單元做成一個基類,實現(xiàn)一些通用的策略,比如HP生命值, Attack攻擊力, Define防御力, 數(shù)據(jù)配置表加載,防御力攻擊力計算等。然后具體的戰(zhàn)斗單元我們繼承自這個基類,比如玩家Player, 怪物Boss, 小怪Monest等。這些戰(zhàn)斗單元實現(xiàn)具體的各個策略,每個策略的數(shù)據(jù)就來自策劃提供的數(shù)據(jù)配置表。

3 操作決策層

什么時候要追擊,什么時候要攻擊,什么時候放技能,這個就屬于行為操作決策。一般常用的操作決策有玩家UI操作(單機), 網(wǎng)絡事件操作, AI操作決策(單機或服務端上的AI決策),固定操作序列等。我們把決定用哪些策略來戰(zhàn)斗放到到操作決策層。比如玩家有一個UI攻擊操作,UI操作層就會調用玩家決策層接口來實現(xiàn)這個攻擊,決策層,就會去找對應的目標,調用功能組件發(fā)起攻擊。AI操作決策層,根據(jù)環(huán)境決定做什么,得到具體的操作,然后調用策略層的接口來實行具體的功能。
今天給大家分享了戰(zhàn)斗的三層設計,我結合這個設計也做了一個視頻教程《Unity如何架構設計戰(zhàn)斗系統(tǒng)》與戰(zhàn)斗代碼demo,方便大家具體學習與實踐。

今天的分享就到這里,關注我,可以獲取一些更多的Unity 游戲開發(fā)相關的技術講解和課程。
更多教學資料:https://bycwedu.vipwan.cn/promotion_channels/829468798??