轉自:http://www.gameres.com/489361.html
騰訊一下出了兩款MOBA游戲,全民超神,王者榮耀,玩了一下,效果不錯,就分析了一下它底層的一些技術,發現一個是采用的狀態同步,TCP協議,另一個是采用的幀同步,UDP協議。自從去年了解到即時游戲幀同步這門技術,我就一直關注使用這個技術的游戲,一直沒有發現,雖然我們自己的游戲也是采用的幀同步,畢竟還沒有上線,現在線上有幀同步的游戲,效果還挺好,有點小激動。所以就寫了這篇文章,分享出來大家一塊研究。
先說一些題外話,感慨一下,沒興趣的直接略過。
做了這么多年游戲了,深深知道一個游戲的成功需要多方面的因素,不僅需要人和,有的時候也需要天時地利,但作為一個游戲開發者而言能決定就是人和,而這也是游戲能成功的基礎,有一幫人能夠全身心的投入去開發一款游戲,不斷的打磨甚至調整方向,面對問題能夠及時反饋,不斷迭代,就像做一個互聯網產品一樣,在這個過程中團隊里的所有人都能夠互相信任,不厭其煩的對產品進行改動,每一次的信任來源不是為大家打雞血畫餅,而是實實在在的數據分析以及努力總結原因后的理性決策。如果以上能夠堅持的話,先不說創新,最起碼游戲可以做到某一品類的極致,我想在任何的市場環境下,只要這個品類還沒死,總有你的一席之地,在我看來很多游戲死了,很多原因是做的還不到位,向當年抄COC的游戲很多,最后缺沒有一款成功的,而截至到目前COC的利潤還在不斷上升,如果國內抄襲者真能做到COC的一樣的體驗,我想一定會有成功的。
那又有人要說了,怎樣才能做的比別人還好呢,這個問題確實比較復雜,我感覺首先一定要有合適的人,什么是合適的人呢,從3個方面考察:責任心積極性、學習能力、能力,我把能力放在最后是因為如果前面兩個條件滿足的情況下,這個人一定會變得有能力,然后就是需要有個高的要求,目標就是精品,這個不是光說說就行了,從策劃設計,程序實現,美術都要向著最高的標準要求,要比市面上的都要優秀,絕對不會為了各種其他因素(時間點,實現復雜)有任何妥協。最后是需要有點耐心,合理安排計劃時間,高效率完成,其實這點事最難的,團隊里的人很多,游戲制作有的時候經常需要反復,經常就是初期很有激情,中期不斷磨滅,到了后期(尤其是項目遇到困難時候)就比較松懈了,如果是沒有耐心的人估計在一起繼續工作都是問題了,還怎么談之前的事情。團隊是需要打磨的,如果你有一支這樣的團隊,那真的要好好的珍惜。
好了,這是我對于游戲開發的一些感慨,還是回歸正題吧,對于一個游戲來講,戰斗就是靈魂,如果戰斗做不到極致,其他方面做的再好也是徒勞,這幾年,也參與了很多游戲的開發,其中有很多游戲是從決策到死掉全程參與,深有感慨。從端游到頁游 從頁游再到手游 每一個新市場機會出現的時候,都是從閉著眼睛就能賺錢到大部分賺不到錢過度,對游戲的開發技術都要求也是越來越高,只不過每個市場到成熟的時間都被大大縮短了。對于戰斗來講很多都是策劃腦補的跟實際做出來的完全不是一回事,很多原因都是戰斗方案選型就是錯誤的。
從程序角度來講,我把戰斗從兩個維度分類:
1、從操作方式上分為回合操作、即時操作。
2、從交互方式上分為 離線戰斗 聯網戰斗,這個地方需要說明一下,有些游戲雖然也能進攻別人,例如COC 但是因為戰斗的時候,另外一個人是不可以操作的,類似于這樣的戰斗也可以稱為離線戰斗。
基本上所有的戰斗都是以上兩種方式在某種程度的組合而已,例如夢幻西游可以認為是聯網戰斗、回合操作類型。
最近比較火的全民超神,王者榮耀,屬于 (聯網戰斗|離線戰斗)即時操作類型。
最新網易出的功夫熊貓 屬于 (聯網戰斗|離線戰斗)即時操作類型,相對于dota類的全民超神、王者榮耀,他對延遲要求的更高了。
如果在立項初期,項目計劃時候不確定游戲的操作類型,以及網絡要求,做得后期要想調整的話,改動是致命的,假設按照之前時空獵人的方式實現的純離線戰斗及時游戲,最多也只能做做離線PVP,如果想增加聯網PVP的功能的話,對于程序來講幾乎需要重寫戰斗。
隨著移動游戲市場越來越成熟,對于戰斗的要求也在提高,原來做一款ARPG,只有單機玩法就足夠了,不需要開發實時PVP,但是現在市面上的ARPG不僅可以聯網PVP,甚至可以聯網組隊PVE了,所以我感覺如果現在再去做游戲的話,只是一個單機玩法,或者是離線PVP玩法已經遠遠不能滿足現代玩家的口味了。
我認為現在戰斗系統需要滿足一下幾點。
1、一定要有離線PVE玩法,或者離線PVP玩法,可以在讓玩家在網絡不好的時候消遣,節省流量。(全民超神、王者榮耀在5V5匹配時候都有一定幾率匹配到離線戰斗,這個時候是不耗流量的,其他人全是AI控制的)
2、一定要有在線PVP,在線PVE,能夠讓玩家在網絡比較好的時候,實時競技。增加可玩性。
3、戰斗中,盡最大程度節省玩家的流量,例如全民超神這款游戲,一場30分鐘的戰斗基本上要消耗掉20M的流量,而且此類游戲大部分是玩的聯網戰斗,基本上在非wifi情況下沒法玩。
4、需要有戰斗回放機制,可以讓策劃設計離線玩法的時候更自由,例如COC,戰斗回放基本變成了它游戲的一部分。
5、防作弊,如果有離線玩法的話,一定有機制對離線玩法的結果進行驗證,要不然等你游戲真火了,你就知道錯了。
6、實現難度相對較低。
對于聯網游戲來講,同步的方式主要分為兩種,狀態同步、幀同步。
1、狀態同步:顧名思義,是指的將其他玩家的狀態行為同步的方式,一幫情況下AI邏輯,技能邏輯,戰斗計算都由服務器運算,只是將運算的結果同步給客戶端,客戶端只需要接受服務器傳過來的狀態變化,然后更新自己本地的動作狀態、Buff狀態,位置等就可以了,但是為了給玩家好的體驗,減少同步的數據量,客戶端也會做很多的本地運算,減少服務器同步的頻率以及數據量。
2、 幀同步:RTS游戲常采用的一種同步技術 ,上一種狀態同步方式數據量會隨著需要同步的單位數量增長,對于RTS游戲來講動不動就是幾百個的單位可以被操作,如果這些都需要同步的話,數據量是不能被接受的,所以幀同步不同步狀態,只同步操作,每個客戶端接受到操作以后,通過運算可以達到一致的狀態(通過隨機種子保證所有客戶端隨機序列一致),這樣的情況下就算單位再多,他的同步量也不會隨之增加。
下面我們從以上的5個方面對各自實現方式進行描述:
id="iframe_0.9020318946303958" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22http://www.gameres.com/data/attachment/forum/201602/29/1021578dxy22edkkaeeew5.jpg?_=5283265%22%20style=%22border:none;max-width:1569px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.9020318946303958',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 1569px; height: 276px;">
總結一下:
1、對于回合制戰斗來講,其實選用哪種方式實現不是特別重要了,因為本身實現難度不是很高,采用狀態同步也能實現離線戰斗驗證。所以采用幀同步的必要性不是很大。
2、對于單位比較多的RTS游戲一定是幀同步,對于COC來講,他雖然是離線游戲,但是他在一樣輸入的情況下是能得到一樣結果的,所以也可以認為他是用幀同步方式實現的戰斗系統。
3、對于對操作要求比較高的,例如MOBA類游戲有碰撞(玩家、怪物可以互相卡位)、物理邏輯,純物理類即時可玩休閑游戲,幀同步實現起來比較順暢,(有開源的Dphysics 2D物理系統可用 它是Determisti的)。
4、對于戰斗時大地圖MMORPG的,一個地圖內會有成千上百的玩家,不是小房間性質的游戲,只能使用狀態同步,只同步自己視野的狀態。? ??
5、幀同步有個缺點,不能避免玩家采用作弊工具開圖。