丨移動開發(fā)工作三年半轉(zhuǎn)型手游_第1頁
丨移動開發(fā)工作三年半轉(zhuǎn)型手游_第2頁
丨移動開發(fā)工作三年半轉(zhuǎn)型手游_第3頁
丨移動開發(fā)工作三年半轉(zhuǎn)型手游_第4頁
丨移動開發(fā)工作三年半轉(zhuǎn)型手游_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

術(shù),游戲開發(fā)也需要用到。作為Android發(fā),我們一層一層往底層走的優(yōu)游、IoT、AI、音等其他方向,今天我們所熟悉的Android平臺知識以你好,我是,來自騰訊旗下一間手游,應(yīng)紹文的邀請,在《Android開發(fā)高我在2017年4月,從Ap客戶端開發(fā)轉(zhuǎn)崗成為一名“用命創(chuàng)造快樂”的手游客戶端開發(fā)。在轉(zhuǎn)為手游開發(fā)之前,雖然玩游戲會被游美的畫面吸引,但是并不清楚游戲是如何將這些精細(xì)的畫面呈現(xiàn)出來,覺得游戲開發(fā)好像一個神秘的組織一樣,不知道游戲開發(fā)團(tuán)隊(duì)的同學(xué)每天在做什么。如果你也對游戲開發(fā)有些好奇,不知道是不是也有我之前同樣的困惑?現(xiàn)在我以一個親歷者的,跟你講講轉(zhuǎn)向手游開發(fā)的那事兒。策劃組分為策劃、數(shù)值策劃,是整個游戲的,一個游戲的是否好玩、周邊系統(tǒng)能否更好地支撐,是整個游戲成敗的關(guān)鍵。有些團(tuán)隊(duì)也會把運(yùn)營組放到策劃組當(dāng)中,運(yùn)營同學(xué)主要的工作職責(zé)是外部合作、策劃游戲內(nèi)的活動、根據(jù)活動數(shù)據(jù)對游戲或者活動進(jìn)行相應(yīng)調(diào)整,希望可以盡量延長游戲生命周期并提高游戲收入。美術(shù)組包括原畫師、視覺設(shè)計(jì)、2D/3D視覺特效設(shè)計(jì),其中負(fù)責(zé)視覺特效的同學(xué)與負(fù)責(zé)程App開發(fā)的程序組同學(xué)關(guān)注的是系統(tǒng)的架構(gòu),希望盡量多了解系統(tǒng)能為App提供的接口或者能力。而手游的程序組同學(xué)是關(guān)注游戲引擎的架構(gòu)和如何在引擎的基礎(chǔ)上優(yōu)化游戲性能。下面我以Cocos引擎為例,帶你看看手游的開發(fā)流程以及手游是如何運(yùn)行游戲架以我的游戲項(xiàng)目為例,游戲整體架構(gòu)如下其中資源更新模塊讓游戲能夠不斷發(fā)布Bugfix和Features配置系統(tǒng)提供給策劃和運(yùn)營同學(xué),主要是XLS件用于配置游戲內(nèi)的關(guān)卡、活動等。策劃同學(xué)的配置會在游戲編譯過程中自動轉(zhuǎn)表,根據(jù)配置文件生成Lua文件。Services管理著游戲內(nèi)的全部數(shù)網(wǎng)絡(luò)模塊負(fù)責(zé)與建立Socket并通信游戲內(nèi)使用MVC模型控制各個游戲內(nèi)模塊的跳在單個功能模塊中,邏輯與動畫分離,邏輯層產(chǎn)生動畫,動畫層消費(fèi)動畫并讓游戲內(nèi)的精靈根據(jù)執(zhí)行特定動作。游戲場景設(shè)Cocos采用節(jié)點(diǎn)樹形結(jié)構(gòu)來管理游戲?qū)ο螅粋€游戲可以劃分為不同的場景(See),一個場景又可以分為不同的層(Layer),一個層又可以擁有任意個精靈(Sprie)。游戲里關(guān)卡、周邊系統(tǒng)的切換也就是一個一個場景的切換,就像在中變換舞臺和場地一樣,由導(dǎo)演(Direcor)負(fù)責(zé)不同游戲場景之間的切換。一個Cocos游戲的基本結(jié)構(gòu)如下:Cocos引擎中,坐標(biāo)系X軸向右、Y軸向上,Z軸(Z-Order)垂直于屏幕指向屏幕外,由于是2D游戲,所以Z軸只用作控制游戲元素的前后順序。同一個場景中兩個或者部分的Sprite,Z-Order大的精靈會遮擋住Z-Order小的精靈,相同Z-Order有了樹形結(jié)構(gòu)和Z-Order,就能利用Cocos引擎構(gòu)建出任意2D游戲場景了手游的運(yùn)行流游戲的主ActivityonCreate時候創(chuàng)建GLSurfaceView,它繼承自View,是引擎用于繪制游戲內(nèi)容的。同時GLSurfaceView也接受玩家的點(diǎn)擊,用于引擎與玩家的交GLSurfaceView創(chuàng)建之后,引擎開始執(zhí)行main.lua,導(dǎo)演調(diào)用runWithScene接口,游戲就進(jìn)入到第一個“場景”中了。GLSurfaceView中了一個while循環(huán),循環(huán)中發(fā)生的(比如SurfaceView創(chuàng)建、寬高發(fā)生變化等)通過Renderer接口傳遞給外部。Renderer其中一個接口就是onDrawFrame,Cocos會在onDrawFrame接口實(shí)現(xiàn)中借用《我所理解 Cocos2d-x》單幀處理流程,你可以看到在每幀中遍歷UI,根據(jù)之前對精靈屬性的設(shè)置,生成繪制命令,交給OpenGL制,最后把App關(guān)于熱更熱更新是App開發(fā)和游戲開發(fā)都避不開的話題,但是App的熱更新與游戲的熱更新有著本質(zhì)的區(qū)別。App開發(fā)的熱更新涉及整個系統(tǒng)層面的實(shí)現(xiàn)細(xì)節(jié),比如我在老東家工作期間實(shí)現(xiàn)的熱更新框架,需要了解的內(nèi)容非常多,包括Dex文件的加載過程、SO文件查找過程和APK編譯過程的詳細(xì)細(xì)節(jié),每個不都可能導(dǎo)致熱更新不生效甚至導(dǎo)致嚴(yán)重的以Cocos引擎為例,Cocos引擎的是C++實(shí)現(xiàn)的,對外提供了JS、Lua接口。業(yè)務(wù)開發(fā)過程中絕大部分代碼是Lua代碼,只有涉及系統(tǒng)相關(guān)接口,比如支付、音頻、WebView,才需要寫一部分系統(tǒng)相關(guān)的代碼。Lua碼經(jīng)過編譯之后生成的二進(jìn)制代碼是“.luac”文件,并通過luaL_loadbuffer接口來加載一段“.luac”的文件內(nèi)容。Cocos引擎在初始化過程中會設(shè)置“代碼查找路徑”,加載Lua代碼的時候會挨個遍歷每一個被載“.luac”文件,放到優(yōu)先的查找路徑中,游戲重啟之后引擎就會優(yōu)先加載新的代碼啦當(dāng)然還有另外一種更為激進(jìn)的方式,不需要重啟游戲就能達(dá)到熱更新的目的Cocos以LuaEngine為,執(zhí)行Lua代碼驅(qū)動C++部分的圖形庫、音頻庫、物理引擎等。LuaEngine緩存了通過luaL_loadbuffer接口加載起來的代碼,只要重啟整個LuaEngine清理掉緩存的代碼,就能在后續(xù)需要執(zhí)行代碼的時候去重新加載代碼文件。這其實(shí)Unity擎也是類似,可以使用xLua類似的技術(shù),讓Unity擎也能開心地Lua游戲也需要優(yōu)化安裝包大在App開發(fā)過程中,優(yōu)化安裝包的大小是一個不可避免的話題。壓縮、代碼,插件動態(tài)等眾多實(shí)現(xiàn)方案也都為大家所熟知。手游安裝包大小可能并不像App安裝包要求那么嚴(yán)格,熱門游戲比如《》《王者榮耀》,安裝包大小幾乎都接近2GB。雖然玩家對游戲安裝包大小不是特別在意,但有意識的減小安裝包大小也是很有必要的,畢竟安裝包大小會影響游戲轉(zhuǎn)化率,進(jìn)而影響游戲收入。手游安裝包中,資源占了安裝包體積的絕大部分,以PNG為主。通常直接壓縮PNG是有損壓縮,經(jīng)過游戲引擎渲染,游戲界面會出現(xiàn)很多噪點(diǎn)。這里有一種分離Alpha通道的壓縮方案,可以供你參考。32位透明PNG包含了四個通道:RGBA,其中每個通道占8Bit。把RGBA四個通道中的Alpha通道數(shù)據(jù)拆分出來為一張PNG8,剩下的RGB數(shù)據(jù)為一張JPG格式。JPG格式的在保證高壓縮率的同時也能保證質(zhì)量,以此達(dá)到壓縮大小的目的。這種方案的壓縮率大概在左右在游戲運(yùn)行過程中,使用紋理之前先把JPG和PNG8文件都到內(nèi)存,將他們包含的RGBAlpha據(jù)重新合并后,交給OpenGL于渲染。這個壓縮方案簡單易操作,并游戲的性能優(yōu)性能是開發(fā)者離不開的話題。手游和App開發(fā)一樣,也需要關(guān)注游戲的各方面性能指內(nèi)少內(nèi)存占用。在美術(shù)同學(xué)能接受的前提下,降低深度也是快速優(yōu)化內(nèi)存的一個方法切換場景時盡快釋放上一個場景的無用紋幀減少DrawCall。游戲引擎每次準(zhǔn)備數(shù)據(jù)并發(fā)送給GPU去渲染的過程,稱為一次DrawCall。Cocos把使用相同貼圖、blendFunc、Shader的精靈合并到同一個渲染命令中提交給GPU。我們常說的合圖就是把很多小合并到一張大中,這樣當(dāng)屏幕中有多個連續(xù)渲染的精靈用到同一個大圖,CPU就會(有可能)把它們合并之后統(tǒng)一提交給GPU。另外Cocos并渲染命令是根據(jù)精靈在場景中的順序來做的,最終的合并效果不減少屏幕內(nèi)需要渲染的精靈個數(shù)。如果屏幕中有“成組”的元素需要繪制,比如榜中每個玩家的Item,在Cocos中可以使用CCRenderTexture,把每個“成組”的元素繪制到CCRenderTexture綁定的紋理,然后用CCRenderTexture替代原有的Item。這與Android開發(fā)中自己實(shí)現(xiàn)View的onDraw函數(shù)類似,并且這也是減少DrawCall的分幀。真的遇到CPU集型的任務(wù)時,例如同屏幕確實(shí)需要大量精靈,可以把它們拆分剛剛過去的2018年是游戲比較慘淡的一年,游戲版號從暫停到現(xiàn)在終于慢慢開始放出,簡直是千軍萬馬過獨(dú)木橋。但從目前來看,2018年確實(shí)也像某些大咖說的那樣,可能手游早已經(jīng)結(jié)束了野蠻生長的年代,6年前可能隨便一款游戲都可能成為爆款,類似捕魚達(dá)人、蘿卜,它們誕生在Android、iOS爆發(fā)的那幾年。而現(xiàn)在的游戲玩家需要的是更新穎的和更加精細(xì)的游戲體驗(yàn)。例如MOBA類的《王者榮耀》、SLG類的《亂世App開發(fā)轉(zhuǎn)手游開發(fā),可行2018年和2019年,市場對App開發(fā)的崗位需求量已經(jīng)不像幾年前那么大,而且也有一些同學(xué)也咨詢過我App開發(fā)轉(zhuǎn)手游開發(fā)是否合適。關(guān)于這個問題,我的回答是:可以轉(zhuǎn)到手游開發(fā)跟App開發(fā)相比,只不過是換了工作內(nèi)容,關(guān)注的領(lǐng)域不同而已,基本原理是相通的。App開發(fā)需要用到的很多技術(shù),游戲開發(fā)依然也需要用到,比如卡頓分析、網(wǎng)絡(luò)、I/O優(yōu)化。而且游戲的大部分邏輯庫是與平臺無關(guān)的,所以不必?fù)?dān)心適應(yīng)不了新的工作優(yōu)隊(duì)時解決的第一個問題:游戲在Android系統(tǒng)上JNI找不到函數(shù)的Crash穩(wěn)穩(wěn)占據(jù)了每個版本的前三名,版本Crash率由于這個問題而一直保持在1%左右。當(dāng)時由于團(tuán)隊(duì)對系統(tǒng)沒有深入了解,所以并沒有很好的解決辦法。這個問題其實(shí)讀一遍Android系統(tǒng)查找Native函數(shù)的代碼,基本就能找到解決方案了。劣畢竟是兩個不同的開發(fā)方向,轉(zhuǎn)方向的同學(xué)也需要迎接壓力。與畢業(yè)后直接進(jìn)入游戲行業(yè)的同學(xué)相比,“半路”的同學(xué)相對缺乏原始技術(shù)積累,需要從基礎(chǔ)的概念開始學(xué)起,比如上面提到的DrawCall、合圖、OeGL、haer,需要消耗大量精力去學(xué)習(xí)。所以需要轉(zhuǎn)方向的同學(xué)足夠自律,主動補(bǔ)齊這些技術(shù)短板。轉(zhuǎn)方向后的技術(shù)路有些同學(xué)說App開發(fā)者的技術(shù)路線寬,擔(dān)心手游開發(fā)者將來技術(shù)路線會越來越窄,將來不好找其他工作。有這個擔(dān)心是正常的,手游開發(fā)崗位的市場需求量比移動開發(fā)需求量小太多,但這不應(yīng)該成為害怕轉(zhuǎn)手游開發(fā)的理由。個人覺得需要從一個更宏觀的角度看待這兩個不同的開發(fā)崗位,不要鉆在技術(shù)的牛角尖里無法自拔。技術(shù)通道無風(fēng)險(xiǎn),而更應(yīng)該擔(dān)心的是游戲的政策風(fēng)險(xiǎn)。小游戲在2017年和2018年真是火了一把,鑒于小游戲簡單、上手快,想要轉(zhuǎn)方向的同學(xué)可以先用小游戲來練手?!奥槿?/p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論