前言服務器
轉載請標明出處http://www.cnblogs.com/zblade/
網絡
好久沒有更新博客,中間遷移過一次博客,後來一直忙於項目的開發,忙的晚上回去沒時間寫博客,週日又要自我調整一下,因此空閒了好久沒有繼續寫博客。最近終於慢慢放慢節奏,項目也快上線了,能夠有空寫一些我的的筆記。準備寫一個戰鬥系統的入門筆記,也算一個自我總結和反思的過程,中間有些地方是我的的一些想法和理解,若是有什麼不正確的,歡迎你們留言討論。性能
一般,咱們在玩一款遊戲的時候,最直接面對的玩法,就是這款遊戲的戰鬥系統。因爲遊戲的分類實在太多,對應的戰鬥玩法也各有其特點。而我目前參與研發的遊戲,主要是RTS遊戲和MMORPG遊戲兩種類型,因此個人隨筆就記錄一下MMORPG遊戲的戰鬥系統的一下設計筆記。動畫
2016年屬於MMORPG爆發的一年,多款MMO手遊均取得不錯的運營業績,2017,依然屬於主流的手遊研發類型。在MMORPG遊戲中,目前主流的戰鬥系統能夠分爲2類:回合制戰鬥和即時制戰鬥。回合制遊戲的表明,《夢幻西遊》,堪稱經典,網易對於這款端遊轉手遊的遊戲也是用心研發和運營。即時制戰鬥的表明,《劍俠》,《齊天大聖》,資料片流出的《劍網三手遊》等,都有不錯的即時制戰鬥體驗。spa
雖然不少人對於MMO遊戲的理解,主要在系統玩法和社交體驗上,大部分玩家進遊戲後的戰鬥都是開啓自動掛機的戰鬥,相對於MOBA遊戲,不注重戰鬥體驗。不過剝離出遊戲的類型,整個遊戲的戰鬥系統其實屬於一個相對獨立的模塊,並且是整個遊戲的核心部分,因此掌握理解了戰鬥系統,對於大部分的遊戲能夠有一個相對深刻的理解。本文就從一個小白的角度去理解隱藏在背後的即時制戰鬥系統是如何執行的。設計
戰鬥系統的組成對象
從小白的角度理解,戰鬥系統,能夠分爲:按鍵響應,技能獲取,尋敵檢測,技能釋放,傷害計算,戰鬥表現,總共6個大的部分,下面我逐個分析其中的一些執行邏輯。blog
1、按鍵響應遊戲
在進入遊戲後,在遊戲的界面上,能夠看到一個左側的搖桿,右側都會有一個當前職業的技能控制按鈕。這在MMORPG和MOBA遊戲中,屬於比較常見的設計。咱們在操做遊戲角色進行戰鬥的時候,能夠點擊右側的技能按鈕,從而釋放技能進行戰鬥。從技能按鈕點擊,到執行戰鬥,第一步就是按鈕響應。事件
在玩家進入遊戲後,就會在遊戲模塊中打開當前角色對應的技能界面,同時對玩家的點擊按鈕添加一個事件監聽。若是你對事件監聽不是很瞭解,直白的說,就是A添加一個attention,該attention是關注B是否發生,當B發生的時候,B廣播其發生,這時候A接收到B發生了,則執行B發生時A應該執行的一些操做。這樣的一個直白解釋,就是常見的監聽系統的設計過程。這樣當玩家點擊技能按鈕X的時候,技能界面會讀取其對應的技能指代,而後將其廣播出去。在前面監聽的部分,在收到該事件後,就會執行技能獲取操做,從而傳遞到後面的部分。
2、技能獲取
如今執行到第二步,這時候已經知道玩家點擊了某個對應的技能,可是具體是什麼技能,還須要進行一系列的操做才能獲取到。首先,遊戲中,會有不一樣的職業,不一樣的職業會有不一樣的技能配置。因此首先是須要找到當前職業對應的技能。怎麼獲取呢?在MMORPG遊戲中,對於不一樣的職業,會開發對應的技能組件SkillCpnt。在每一個職業角色的實例上,掛載一個技能釋放器SkillCaster。這個技能釋放器SkillCaster,就是用來執行技能的讀取和釋放的主要角色。那麼它在響應技能按鈕點擊後,會獲取當前玩傢俱體的技能組件SkillCpnt, 在當前技能組件SkillCpnt中,獲取當前技能對應的技能配置。一般,一個技能按鈕,會對應的配置一個或者多個技能,這時候須要檢測技能的對應釋放順序,同時須要檢測當前技能的CD和消耗等。在獲取到能夠釋放的技能後,接下來就須要進行技能的釋放了。技能釋放的第一步,就是尋找攻擊目標。
3、尋敵檢測
在讀取到技能後,接下來就是要找到能夠攻擊的目標。首先,會獲取當前技能範圍內的全部目標,而後進行檢測。首先,檢測其是否有效,而後檢測是否屬於當前技能攻擊的類型(好比有的技能打人,有的技能打建築),而後判斷是不是敵人類型(不一樣玩法對於敵人類型的判斷不一致,須要具體設計),是否在攻擊範圍內,在這個檢測中,一般策劃會進行一系列規則擴展,最後獲得是一個繁瑣的檢測過程。對於這樣的擴展,程序只能儘可能保證擴展性和魯棒性,同時對於某些特定的檢測,儘可能寫入特定的玩法,避免影響公共檢測的性能。
在這兒,須要補充一下,對於遊戲中的角色,主要分爲兩類:玩家和怪物。因此,對於這兩類角色的技能檢測,能夠分爲兩種不一樣的方式進行檢測的,這樣能夠儘可能保證各自的規則設計,避免耦合和繁瑣。
4、技能釋放
相對於前面三步操做,技能釋放的流程就比較簡單,在完成尋敵檢測後,此時已經知道當前主角要用什麼技能,對着什麼目標進行釋放了,因此經過技能釋放協議,將相關的信息傳遞到服務器,服務器會收到當前釋放技能的請求,而後進行技能校驗,主要是檢驗技能是否處於CD,技能消耗是否足夠,攻擊對象是否有效等檢測,若是經過,則下發給客戶端作技能表現。同乘爲了提升用戶體驗,在本地玩家自身的客戶端,其釋放的技能,是先作技能釋放,同時傳遞給服務器技能釋放的請求,若是經過則直接繼續,若是不經過,則打斷播出的技能動做。這樣的設計流程,是爲了不在網絡很差時,技能響應過程太慢,玩家點擊時沒有及時的響應,用戶體驗太差。
5、傷害計算
傷害計算的過程,屬於偏向數學計算的過程,若是從小白的角度理解,其基本的流程能夠分爲:技能更新,傷害尋敵,傷害計算,傷害結果這4個步驟。首先是技能更新,在打出當前技能後,並非當即生效的,在配合着動畫和特效,會有一個更新時間間隔,當更新完後,就會進行傷害檢測(一般這個過程稱爲子物體更新的過程)。完成子物體的更新後,接着就是傷害計算,首先須要根據規則找到當前子物體周圍配置範圍內的物體,作一次尋敵檢測。這個檢測的過程,其實就是咱們常見的技能特效模型檢測,好比直線檢測,圓弧檢測,圓形檢測,矩形檢測,這四種基本最多見的檢測。經過這四種對應的檢測能夠得到一個能夠攻擊的目標對象列表,而後逐個計算其對應的傷害。具體的傷害計算,須要根據數值的傷害計算公式,讀取攻擊者和被攻擊者的相關屬性完成對應的傷害值計算。在獲得一個傷害結果後,就會進行扣血的操做,而後下發相應的數據結果給客戶端。
6、戰鬥表現
最後的戰鬥表現,是一個概括的過程,包括技能釋放角色的戰鬥動做和特效,被攻擊者的戰鬥動做和特效,已經相應的UI數據展現等。這樣的戰鬥表現,均可以用對應的技能控制器來實現,特定的技能控制器,在設置後會進行自更新,而後觸發對應的動做播放,在動做播放中會觸發播放對應的特效。基於這樣的基本設計,就能夠實現整個戰鬥的動做和特效播放。
寫到這兒,我又要再現個人靈魂畫法了,將整個過程概括爲一個草圖,哈哈:
好了,對於整個戰鬥流程,從小白的角度作了一個大概的講解,後續我會接着作一些戰鬥系統相關的文章分析,好比尋路,行爲樹,AI,組件設計等,下篇文章見~