文章出處

 去年11月,上海火溶網絡CEO王偉峰以其第一款3d手游產品《啪啪三國》為例,著重講解了unity3D手機網游開發的經驗,其中涉及了團隊組成、人員要求、常見的unity3d開發遇到的坑及解決辦法。在演講中,王偉峰也貢獻了《啪啪三國》開發過程中總結的各種經驗,從優化、插件庫、服務器架構、SDK等很多細節進行了講解。值得一說的是,王偉峰現場演講十分幽默,冷笑話段子不斷爆出,讓在場觀眾在連續的笑聲中聽完這個特別的技術演講。
<ignore_js_op> 
以下是王偉峰現場演講實錄:
王偉峰:非常感動,大家等這么久的時間,就是來聽我講Unity3D的是吧?開個玩笑。
<ignore_js_op> 
先說點小感慨,我很意外、也很榮幸洪濤(gamelook總編)請我來給大家作技術方面的講解。提到手游,我自己從事技術這多年,作為藏在符號背后的人是有很多話要講的,就結合我們產品開發的過程來談一下我的感受。
我們這個產品可能大家還不太熟悉,就看一下我們的視頻吧。
<ignore_js_op>

 

簡單介紹一下我的游戲經歷,之前做過端游,現在跟兩個老家伙一起在做《啪啪三國》。介紹一下我們團隊的構成,我們目前為止一共有18個人,其中策劃6個,美術3個,程序8個,測試1個。我今天講技術,可能這些職位是我重點介紹的,一個是引擎程序、服務器程序、和工具程序。我主要以程序為主來講解。
服務器程序員
<ignore_js_op> 
它的知識技能和職責,我就不仔細說了,說細了有一點像招聘啟示。他的主要職責雖然負責技術,但是也給產品決策和方向提供一些決策。他最主要的考核指標,就是經驗很重要,最好主導或參與過一款網絡游戲的開發。舉個例子比如說兩個程序員,一個是剛畢業于西太平洋大學,主攻方向是復雜電子穩定器。另外一個人可能在煤老板手下開發過一款游戲,雖然容量不大但游戲可以承擔3000人,我肯定是選跟煤老板干過的人,這是我對服務器程序員的認識。
引擎程序員
<ignore_js_op> 
說到Unity3D我這里有一個引擎程序員的說法,他要懂3D引擎。你怎么判斷這個引擎程序員合格不合格呢?你問他看什么書?他如果說我在看《21天學會Unity3D》這是無法做引擎程序員的。這是一個引擎程序員的書架,看過哪些書呢?《游戲編程精粹》,《GPU精粹》系列,《ShaderX》系列等,哪怕你出去找工作,你跟老板談我讀過這個,也至少看上去象個樣,即使沒看過,至少眼界得開闊,Unity3D之所以用不好,因為有這么多書要看。如果說你經常上Unity3D學院的網站,這個是不管用的。所以說只看《21天學會Unity3D》是學不會Unity3D的。
<ignore_js_op> 
引擎程序員我講講核心的要點,他首先是要了解3D引擎工作的原理,優化起來有的放矢,出了問題才知道如何救火。如果你開始沒有把握好項目的標準的話,一不小心就跳進大坑。這一塊做不好的話最要命的是我,比如人物做了50套,如果一旦不行,你們推倒重來,那你這個美術資源就打水漂了。真正找到靠譜的Unity3D的人,那就是“媽媽再也不用擔心我用Unity3D做手游了。”
一句話證明你用過Unity3D
普通群眾的評價是:Unity3D坑真多。專家會說?創業團隊用Unity3D做手游必死。
講到這兒我想大部分的人就是想聽聽Unity3D有什么坑。
<ignore_js_op> 
Unity3D的坑我覺得最嚴重的坑就是沒有懂3D的程序員,把Unity當成Office用。
Unity發展這么多年,已經是很強的引擎了。我就摘出來說一說我們遇到的坑,有點不是特別好用,就是第5條,它有一個多人協作的Asset Server偶爾會有時候不靠譜,我們現在改用SVN來做版本管理。然后有一個坑,就是很多團隊很少進行真機測試,屌絲開發商可能連iphone都沒有,一旦測試發現游戲根本跑不動。還有就是第10條,在IOS下無法更新C#代碼,更新就下100M這不是Unity的錯,是IOS的錯。我們做《啪啪三國》的時候也是不知道IOS的限制,負責當初應該規劃一下做成腳本更新。最后簡單說一句,因為現在Windows phone也很熱了,要做WP的有要盡早測試。經鑒定Unity是群眾喜聞樂見、發家致富的好引擎。
然后是經驗分享,“絕密”,我們是怎么做《啪啪三國》的。說之前,我表達一下我對我們兩個創業合伙人的感謝,這些都是絕密,一般人是不輕易說的。現在Unity大家用起來是有一定的門檻,但是也許三個月也許半年后,大家熟悉這些工具以后,們團隊的價值就體現出來了。我們程序員就是做好后勤。
<ignore_js_op> 
先說一下我們程序的工作環境,首先是小黑屋,程序員工作環境不能太敞亮了。我們在硬件設施上是不計成本的,比如說右邊這個高端大氣上檔次的巨屏雙顯,i5CPU+Win7 64,8G內存,SSD固態硬盤。為什么要用這么好?很多程序員招聘的時候都會問,你們公司是不是雙顯啊?從我們關心生產力的角度來講,這套“神機”可以大大提高Unity3D的開發效率。Unity3D在整個程序員開發的過程當中,它其實很多的工作是需要很多讀盤操作的,你有這么一套神機的配置,程序員的工作效率我估計應該會有5—6倍的提高,這個是實話實說。如果你們還像我們一樣高端大氣的話,你還應該配一個Macbook Pro的匹配。
效率優化
然后講我們效率優化的一般方法。當然我們講這些方法其實建立在一個方法上,就是你熟讀我前面的50本書你就融會貫通了,我說什么你就一目了然了。
第一個排除法,懷疑哪里就屏掉哪里。這是最基礎的一個方法,也是最有效的。
第二個就是用數據說話,善用Unity4強大的Profiler工具,我現在感覺有點水平的程序員,依靠Unity4強大的Profiler工具,沒有理由做不出一個跑不起來的游戲,因為這里面設計的性能分析和統計是相當詳細和相當有作用的,它可以統計你CPU的占用率,又可以統計你每個模塊、每個函數,每個執行的時間。還有一個就是說CPU的效益,然后我們知道還有顯卡,還有GPU,GPU就是它有一個很直觀的圖,你渲染了多少三角面。內行人一看就知道了。
最后再強調一點就是真機制測試,經常發布到手機上跑跑,如果是屌絲團隊,你沒有IPhone手機的話還是趕緊買吧。
優化1:
說說我們的方法,draw call太高怎么解決。
<ignore_js_op> 
3D渲染東西,一個人和一百個人是不一樣的。你一百個人就要渲染一百次,怎么講呢?想讓效率提高的話,最優先的辦法就是看draw call高不高,高的話就降低一下。最快的渲染,就是不渲染。這塊就涉及到我們在這個屋子里,屋子外面是看不見的,但是計算機是可以看到的,你就不要渲染出來,或者是我背后有誰,如果有兩個人我就把它刪掉。還有土辦法就是手動配置可見范圍列表。
然后第二個就是物體太多,可以考慮將多個物體合成一個,這個可以由美術來做,也可以由程序來做。我原來是一片樹林,起碼有20多棵樹,我們讓美術合并一下,把這20多個樹合并成一個物體,看起來是一個樹林,另外一個就是讓程序來做的,你看我們戰場西面,因為我們有攻兵,一個隊伍有30多人一人射一支箭這就就要300多個,就讓程序把所有的動態合并成三個。包括影子,就是動態合并所有的影子。
優化2
<ignore_js_op> 
理解所使用Material的實現原理,不濫用Material。前面有人講過,Unity跟玩游戲一樣的,你發現后面跑不動了,就要有一個明白人給你做一個規劃,你有沒有這樣的效果,如果有的話你要怎么實現。我們用什么樣的Shader,是不是還有高低配。給大家看一下,左邊這個小菜單是我們自己寫的部分材質的效果,上面也是包括人物和效果。
第三個優化方面,就是模型面數太多。
<ignore_js_op>

這個從顯卡上看是一個人,但是它其實是由三角形組成的。比如說你的人物三角面形特別多?那怎么辦?就減。渲染很多兵的時候我們就用右邊的這個沒腿的,其實做游戲,游戲視覺就是蒙人。
工具化
<ignore_js_op> 
一鍵搞定所有平臺的安裝包。因為大家知道你現在渠道接這么多,你出個版本一個鍵,比如說你有十個渠道,你沒有我們那個神機的話,那打包一個渠道就得半小時。這是我們安卓渠道的出包工具,排名不分先后(全場哄笑)。
因為我做了這么多年的技術,我對工具這個東西非常看重的,包括程序員要有利用工具解放自己的手。
服務器的結構
<ignore_js_op>

這是一個典型的端游結構,前面一個是連接服務器,它的作用就是說我們游戲是一個長連接的游戲,一臺物理機承載服務器承載是有限的,我們是要有很多臺,然后后面就是路由服務器,還連接了兩臺和多臺的服務器。后面這個紅色的是游戲服務器,再后面就是數據庫服務器,提供一個高速的緩沖。選擇這種服務器結構原因是易于拓展
放外掛
<ignore_js_op> 
第三個就是我們游戲的小秘密,我們這個戰場的整個戰斗的核心是C++寫的。這樣的一好處就是一次編寫多次運行,更進一步地好處我后面會講,缺點就是開發速度慢,調試困難。
這是防外掛,防外掛有幾個原則,就是只信任服務器,所有玩家數據都存在服務器。戰斗結果由服務器進行驗證。因為我的戰斗模塊是C++寫的。
數據分析
然后就是數據分析這塊,現在都講究大數據這一塊,其實三、四年前我們就做這樣的東西。游戲里面玩家所有的行為,在服務器上都有日志產生,每天程序收集這個海量的數據,然后放在數據庫進行分析。
瘋狂的SDK
<ignore_js_op> 
接下來就是瘋狂的SDK了,我們現在的情況是IOS10來個,安卓40+,確實挺多,但是這沒有什么不好。
但是有兩個原則要注意,一個是與游戲代碼的關聯性小,第二個要方便調試和測試。這樣的話,我們接SDK的時候,就用工具,用SDK的程序員就可以了解。同時開發商也可以把SDK交給別人去接,不會產生泄露游戲代碼的一個尷尬和擔心。事實證明我們安卓渠道的代理商非常給力,我們所有安卓渠道的SDK都是他們幫我們接的。
我想辦法就是兩個辦法,一個是客戶端的,從第一個標準接口,然后服務器這塊我們引入了一個SDK轉接的服務器,我們游戲的接口相當于通過一個橋梁進行對接。我用一個穩定的服務器就夠了。能夠給工程師測試和調試。這個也能提高工作的效率,他不用整天去熟悉你游戲的關卡。
插件庫
<ignore_js_op> 
接下來就是一個插件/庫,這是我們用到的第三方的東西,一個是NGUI,這是Unity做UI比較靠譜的,也是沒得選擇的選擇。
第二個和第三個就是Protobuf,這是我們用于客戶端和服務器之間傳遞消息包的一個庫,這個庫不錯比較穩定,的是一個國外吃飽了撐的程序員做的,它支持很多的平臺,像安卓、IOS等都有。
接下來是UnityVs,這個東西是Unity代碼調試的插件,這個用起來不錯,可以遠離Unity本身提供的MONO工具。
最后一個是Prime Storekit,這個是搞定正版蘋果的支付。你買了之后你這個蘋果有多少坑就一一而過了。
我這塊的建議就是慎用第三方代碼庫,可能會給跨平臺發布帶來麻煩。
主角制造
<ignore_js_op> 
再接下來就是我們主角光照,三點式光照方法,我們把它引用到游戲里面,左邊的這個角色就是光照模型下來的效果,右邊是普通的,大家看一下可以看出區別,左邊的更立體。然后是主角的制造,我們這個主角也是花了大價錢,雖然是屌絲公司,但是我們省吃儉用不發工資,我們請了龍將的概念美術給我們做了一個設定,可以看到從原畫到3D模型,還原度很高。
<ignore_js_op> 
然后講一下我們場景的做法,因為場景是一個基礎的效果,做出來干巴巴的,想增加一點模式的話就Unity提供的光照效果。后面就是我們一些場景的欣賞,這是我們的一個小村子,漢獻帝最早流浪的地方,這是我們主城荊州城。
<ignore_js_op> 
最后就是我們的卡片,我們的卡片也都是請高手花的,光這個成本都超過一千多。
最后我就用這張圖片來作一個結束,這是我們去年5月我們三個創始人在一個民房里面,三個人三臺電腦,三個創始人在做《啪啪三國》的情景。
<ignore_js_op> 
面對這張照片,我每次看都挺有感慨,什么力量支持三個屌絲,在去年5、6月份的時候,頁游還如日中天,那時候還沒有人講手游。包括你跟投資人談手游,投資人根本不理你。但是那個時候三個人為什么膽子這么大,就敢立項這么一款產品,包括游戲的玩法,包括整個的方式,當時定了就沒有改過。是什么支持我們下這樣的決定,堅持一年零六個月做下來。我總結就是因為我們一直做游戲,我們是游戲人。源于我們對游戲的熱愛和對游戲的敬畏之心,謝謝大家!

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()