MMORPG戰鬥系統隨筆(一) 戰鬥系統流程簡介

2022-07-04 18:48:17 字數 2920 閱讀 7674

前言

通常,我們在玩一款遊戲的時候,最直接面對的玩法,就是這款遊戲的戰鬥系統。由於遊戲的分類實在太多,對應的戰鬥玩法也各有其特色。而我目前參與研發的遊戲,主要是rts遊戲和mmorpg遊戲兩種型別,所以我的隨筆就記錄一下mmorpg遊戲的戰鬥系統的一下設計筆記。

2023年屬於mmorpg爆發的一年,多款mmo手遊均取得不錯的運營業績,2017,依然屬於主流的手遊研發型別。在mmorpg遊戲中,目前主流的戰鬥系統可以分為2類:回合制戰鬥和即時制戰鬥。回合制遊戲的代表,《夢幻西遊》,堪稱經典,網易對於這款端遊轉手遊的遊戲也是用心研發和運營。即時制戰鬥的代表,《劍俠》,《齊天大聖》,資料片流出的《劍網三手遊》等,都有不錯的即時制戰鬥體驗。

雖然很多人對於mmo遊戲的理解,主要在系統玩法和社交體驗上,大部分玩家進遊戲後的戰鬥都是開啟自動掛機的戰鬥,相對於moba遊戲,不注重戰鬥體驗。不過剝離出遊戲的型別,整個遊戲的戰鬥系統其實屬於乙個相對獨立的模組,而且是整個遊戲的核心部分,所以掌握理解了戰鬥系統,對於大部分的遊戲可以有乙個相對深入的理解。本文就從乙個小白的角度去理解隱藏在背後的即時制戰鬥系統是如何執行的。

戰鬥系統的組成

從小白的角度理解,戰鬥系統,可以分為:按鍵響應,技能獲取,尋敵檢測,技能釋放,傷害計算,戰鬥表現,總共6個大的部分,下面我逐個分析其中的一些執行邏輯。

一、按鍵響應

在進入遊戲後,在遊戲的介面上,可以看到乙個左側的搖桿,右側都會有乙個當前職業的技能控制按鈕。這在mmorpg和moba遊戲中,屬於比較常見的設計。我們在操作遊戲角色進行戰鬥的時候,可以點選右側的技能按鈕,從而釋放技能進行戰鬥。從技能按鈕點選,到執行戰鬥,第一步就是按鈕響應。

在玩家進入遊戲後,就會在遊戲模組中開啟當前角色對應的技能介面,同時對玩家的點選按鈕新增乙個事件監聽。如果你對事件監聽不是很了解,直白的說,就是a新增乙個attention,該attention是關注b是否發生,當b發生的時候,b廣播其發生,這時候a接收到b發生了,則執行b發生時a應該執行的一些操作。這樣的乙個直白解釋,就是常見的監聽系統的設計過程。這樣當玩家點選技能按鈕x的時候,技能介面會讀取其對應的技能指代,然後將其廣播出去。在前面監聽的部分,在收到該事件後,就會執行技能獲取操作,從而傳遞到後面的部分。

二、技能獲取

現在執行到第二步,這時候已經知道玩家點選了某個對應的技能,但是具體是什麼技能,還需要進行一系列的操作才能獲取到。首先,遊戲中,會有不同的職業,不同的職業會有不同的技能配置。所以首先是需要找到當前職業對應的技能。怎麼獲取呢?在mmorpg遊戲中,對於不同的職業,會開發對應的技能元件skillcpnt。在每個職業角色的例項上,掛載乙個技能釋放器skillcaster。這個技能釋放器skillcaster,就是用來執行技能的讀取和釋放的主要角色。那麼它在響應技能按鈕點選後,會獲取當前玩家具體的技能元件skillcpnt, 在當前技能元件skillcpnt中,獲取當前技能對應的技能配置。通常,乙個技能按鈕,會對應的配置乙個或者多個技能,這時候需要檢測技能的對應釋放順序,同時需要檢測當前技能的cd和消耗等。在獲取到可以釋放的技能後,接下來就需要進行技能的釋放了。技能釋放的第一步,就是尋找攻擊目標。

三、尋敵檢測

在讀取到技能後,接下來就是要找到可以攻擊的目標。首先,會獲取當前技能範圍內的所有目標,然後進行檢測。首先,檢測其是否有效,然後檢測是否屬於當前技能攻擊的型別(比如有的技能打人,有的技能打建築),然後判斷是否是敵人型別(不同玩法對於敵人型別的判斷不一致,需要具體設計),是否在攻擊範圍內,在這個檢測中,通常策劃會進行一系列規則擴充套件,最後得到是乙個繁瑣的檢測過程。對於這樣的擴充套件,程式只能盡量保證擴充套件性和魯棒性,同時對於某些特定的檢測,盡量寫入特定的玩法,避免影響公共檢測的效能。

在這兒,需要補充一下,對於遊戲中的角色,主要分為兩類:玩家和怪物。所以,對於這兩類角色的技能檢測,可以分為兩種不同的方式進行檢測的,這樣可以盡量保證各自的規則設計,避免耦合和繁瑣。

四、技能釋放

相對於前面三步操作,技能釋放的流程就比較簡單,在完成尋敵檢測後,此時已經知道當前主角要用什麼技能,對著什麼目標進行釋放了,所以通過技能釋放協議,將相關的資訊傳遞到伺服器,伺服器會收到當前釋放技能的請求,然後進行技能校驗,主要是檢驗技能是否處於cd,技能消耗是否足夠,攻擊物件是否有效等檢測,如果通過,則下發給客戶端做技能表現。同乘為了提高使用者體驗,在本地玩家自身的客戶端,其釋放的技能,是先做技能釋放,同時傳遞給伺服器技能釋放的請求,如果通過則直接繼續,如果不通過,則打斷播出的技能動作。這樣的設計流程,是為了避免在網路不好時,技能響應過程太慢,玩家點選時沒有及時的響應,使用者體驗太差。

五、傷害計算

傷害計算的過程,屬於偏向數學計算的過程,如果從小白的角度理解,其基本的流程可以分為:技能更新,傷害尋敵,傷害計算,傷害結果這4個步驟。首先是技能更新,在打出當前技能後,並不是立即生效的,在配合著動畫和特效,會有乙個更新時間間隔,當更新完後,就會進行傷害檢測(通常這個過程稱為子物體更新的過程)。完成子物體的更新後,接著就是傷害計算,首先需要根據規則找到當前子物體周圍配置範圍內的物體,做一次尋敵檢測。這個檢測的過程,其實就是我們常見的技能特效模型檢測,比如直線檢測,圓弧檢測,圓形檢測,矩形檢測,這四種基本最常見的檢測。通過這四種對應的檢測可以獲得乙個可以攻擊的目標物件列表,然後逐個計算其對應的傷害。具體的傷害計算,需要根據數值的傷害計算公式,讀取攻擊者和被攻擊者的相關屬性完成對應的傷害值計算。在得到乙個傷害結果後,就會進行扣血的操作,然後下發相應的資料結果給客戶端。

六、戰鬥表現

寫到這兒,我又要再現我的靈魂畫法了,將整個過程歸納為乙個草圖,哈哈:

好了,對於整個戰鬥流程,從小白的角度做了乙個大概的講解,後續我會接著做一些戰鬥系統相關的文章分析,比如尋路,行為樹,ai,元件設計等,下篇文章見~

2005 11 05 戰鬥記實

最近f上老人很少,好多老人都不怎麼上.所以lm bl之間的群體pk 很少出現.不過昨天是個特例.昨天回家剛家就發現氣氛不對,鐵堡裡人很多.而且看到很多幾個星期不見的朋友,見面第一句話就是 去打幽暗嗎?靠他們也不怕卡.根據以往經驗,lm基本就沒成功功進過幽暗城,最多在人家門口放放火.而且這個爛伺服器實...

華夏60 戰鬥機 最短路dijkstra

華夏60 超音速戰鬥機是當今世界上機動性能最先進的戰鬥機。戰鬥過程中的乙個關鍵問題是如何在最短的時間內使飛機從當前的飛行高度和速度爬公升 俯衝到指定的高度並達到指定速度,以便佔據有利的戰鬥位置。現假定只允許華夏60 執行以下三種基本飛行動作,並且只能在完成了乙個基本動作的情況下再去執行另乙個基本飛行...

英雄遠征Erlang原始碼分析(9) 戰鬥流程解析

和戰鬥相關的模組有mod battle.erl 當玩家程序和怪物程序被建立的時候都會通過mod battle start link 建立乙個戰鬥程序。該戰鬥程序的state,用於儲存玩家上次出手或者使用技能的時機,用於cd的判斷 record state,開始戰鬥的時候,生成攻擊方和防守方的 bat...