偷題——騰訊游戲開發(fā)面試問題及解答
前言
Blake老師有個朋友在騰訊某分部做技術總監(jiān),負責的工作中就包含面試招聘。
那么,近水樓臺先得月~Blake老師根據(jù)面試的問題,作出了以下解答,希望能幫到你順利入職。
01?Unity項目開發(fā)中程序如何愉快的與策劃溝通?
在游戲開發(fā)中,策劃希望能方便地改游戲數(shù)值,游戲數(shù)據(jù),能夠靈活的編輯一些規(guī)則,并且希望在改數(shù)據(jù)時不用問程序,馬上就能拋出效果,策劃在改規(guī)則的時候也希望如此。
規(guī)則一般體現(xiàn)在怪物AI等方面,數(shù)據(jù)一般提現(xiàn)在數(shù)值計算方面。
如果是怪物AI等行為編輯比較多的,我們可以提供給策劃行為決策樹等編輯工具,讓策劃編輯行為和決策。數(shù)值計算,我們提供好數(shù)值策劃表解決方案,讓策劃非常方便的修改里面的數(shù)據(jù)表等。游戲的地圖制作,也是策劃經(jīng)常要干預的地方,Unity項目開發(fā)中地圖編輯器要做好。
02?Unity項目開發(fā)如何避免多人開發(fā)是的提交沖突?
在團隊項目開發(fā)中,由于大家各自開發(fā)格子的模塊或同時開發(fā)交叉的模塊,會導致一些項目提交時候的沖突,Unity開發(fā)中如何避免沖突或者有沖突的時候非常方便的合并呢?
提供幾個經(jīng)驗供大家參考。
1、代碼沖突的合并相對比較簡單,文本合并即可,很多版本管理工具自動就能幫你合并好。即使有沖突,人眼很快就能解決,畢竟都是文本代碼。
2、 游戲場景沖突就不那么好合并了,因為游戲場景本省不是文本,同時合并的時候可能會導致一些參數(shù)要重新指定等,所以很多Unity項目不會往場景里面放任何內容,而是把內容分成一個一個的預制體,每一個人負責一個預制體(視圖)。盡量避免多人同時操作一個視圖。
3、不要在視圖節(jié)點上直接掛代碼,也不要在代碼上直接綁定視圖的節(jié)點組件等,這些都不利于代碼沖突解決,全部都通過代碼來完成。
總結一下:避免多人修改同一視圖,視圖上不掛腳本,全部通過代碼來控制邏輯,代碼提交沖突非常方便解決。
03?Unity Set Pass Call是什么?
繪制一個3D物體完成的流水線叫做Pass。
Unity引擎繪制物體之前,先要給GPU流水線來裝載對應的Shader設置相關Shader參數(shù),叫做SetPassCall。
Set Pass call發(fā)生在切換Shader的時候,這個性能開銷也比較大,所以我們要盡量避免不斷的設置與切換Shader,同時常用的Shader要緩存到內存里面,這樣每次切換的時候速度會比較快。
04?Unity DrawCall是什么?
Unity繪制一個場景的時候,把場景里面的物體分成幾個批次提交給GPU繪制就是幾個DrawCall。
05?降低DrawCall對性能提升的意義是什么?
降低DrawCall,CPU可以把繪制的數(shù)據(jù)一次提交給GPU,比多次提交性能要好,同時GPU繪制的時候一次處理的越多,GPU的吞吐量就越多,就越能發(fā)揮GPU的性能。
06?Unity 是單線程還是多線程的?
Unity可以支持用戶自己開發(fā)使用多線程,比如用戶做網(wǎng)絡模塊的時候,可以開一個線程來做網(wǎng)絡消息的讀取等。
Unity框架里面是兩個線程,一個是main thread,一個是render thread, main thread負責業(yè)務邏輯線程,跑Mono代碼,物理引擎代碼等,render thread負責處理繪制相關,將繪制相關數(shù)據(jù)提交給GPU。
所以unity內部是多線程的,Unity的很多API與場景組件相關API必須要在main thread里面調用,不能在其他線程調用。
07?Unity有哪些合批方式可以降低DrawCall
Unity合批的方式有靜態(tài)合批,動態(tài)合批,與GPU Instancing合批,三種方式可以合并DrawCall。
08?Unity 如何分析內存占用?
遇到內存問題的時候,我們經(jīng)常不知道如何優(yōu)化降低內存的占用,其實處理這樣的問題并不難。
首先你要分析出來哪些地方占用的內存比較多,把內存占用比較多的地方分析出來才是優(yōu)化的首要關鍵。
Unity提供了Profiler工具,可以查看內存的占用情況,如下圖:

09?Unity 如何分析性能熱點?
項目開發(fā)時要對代碼進行優(yōu)化,提升代碼性能。
提升代碼性能要找出來哪些地方是性能的熱點,才是最重要的。
假如你花了100分的力氣,去優(yōu)化一個,性能占用只有10%的地方,這樣優(yōu)化出來的效果也不會提升多少,所以我們優(yōu)化性能一定要從優(yōu)化熱點下手。
如何找到性能優(yōu)化熱點呢?Unity提供了Profiler工具,幫我們把性能的熱點函數(shù)都分析出來了,你可以根據(jù)時間占比,調用次數(shù),來優(yōu)化相關的時間。如圖:

10?Unity如何查看當前場景的DrawCall?
Unity如何查看當前的DrawCall, Unity可以通過profiler和Stats來查看當前DrawCall的占用,Stats 如下圖:

Profiler如下圖:

同樣的職位,自然是大企業(yè)更有前途和“錢途”。
END
想知道大廠面試都問什么,請在文章下方評論后私信:大廠面試題?即可獲?。。?!