Unity面試常見問題
Update Fixed Update Late Update有什么區(qū)別有什么運(yùn)用?
Update每幀調(diào)用,大部分的角色行為都依賴于Update執(zhí)行。
Fixed Update在固定時(shí)間間隔調(diào)用,一般用于剛體的運(yùn)動(dòng)。
Late Update 在所有物體的Update執(zhí)行完之后執(zhí)行,一般用于控制攝像機(jī)運(yùn)動(dòng)。
?
Prefab是什么?
Unity中的預(yù)制體相當(dāng)于是一個(gè)游戲物體及其組件和屬性的集合。也相當(dāng)于一個(gè)新物體的模板。你在編輯器下修改的預(yù)制體能反映到每個(gè)你實(shí)際使用的預(yù)制體中。
?
AssetBundle有什么用?
AseetBundle是一些你選擇導(dǎo)出的資源包,這些資源包中的內(nèi)容已經(jīng)被妥善壓縮,并且允許你在應(yīng)用中正常使用。這也方便開發(fā)者能以流的形式加載模型貼圖音效或整個(gè)場景。AssetsBundlej就是用于簡化下載流程的工具。
?
Resources和StreamingAssets文件夾有什么區(qū)別?
Unity的Resource文件夾中包括我們在游戲中需要用到的一些列資源,會在打包時(shí)打入U(xiǎn)nityPlayer中,這些資源大多數(shù)沒有必要在Inspector上直接附著于組件之上,任何一個(gè)在Resources的資源都可以通過Resources.Load函數(shù)來實(shí)時(shí)加載到游戲中使用
StreamingAssets文件夾中的東西不會隨著Unity打包而壓縮,他會正常放到文件系統(tǒng)中,這是為了幫助游戲運(yùn)行時(shí)能通過文件訪問形式訪問這些資源,比如iOS設(shè)備中,就只能通過StreamingAssets來訪問你需要在游戲中使用的視頻資源。
?
什么是Batching以及Batching是如何作用的?
當(dāng)需要繪制一個(gè)物體時(shí),引擎會需要調(diào)用圖形API(DirectX或者OpenGL)的DrawCall命令,而DrawCall命令。而DrawCall命令一般都是需要調(diào)用大量資源的。這樣子就會對CPU端的運(yùn)算造成壓力,而主要CPU端的壓力都是來自于渲染狀態(tài)變換。Unity使用兩種方式減少這些狀態(tài)變換:
1.?Dynamic Batching 對于小的網(wǎng)格,Unity會將他們一次性打包丟到GPU端來一次性繪制。
2.?Static Batching 對于靜態(tài)物體(不移動(dòng)的物體),Unity會將他們打包成一個(gè)大型網(wǎng)格來一次性繪制。
?
兩個(gè)網(wǎng)格碰撞體Mesh Collider 在什么情況下會產(chǎn)生互相碰撞?
當(dāng)至少一個(gè)網(wǎng)格是凸多邊形時(shí)才行,一般而言網(wǎng)格碰撞的計(jì)算將極其消耗資源。
?
一些附加的問題:
如何實(shí)現(xiàn)無縫游戲場景?
使用四叉樹對所有場景進(jìn)行切分,將每個(gè)四叉樹的葉節(jié)點(diǎn)的資源打包到AssetBundle內(nèi),在打包之后要針對每個(gè)打包的資源查詢重用資源。將共用同一父節(jié)點(diǎn)的重用資源作為子節(jié)點(diǎn)的資源依賴項(xiàng)。根據(jù)玩家在大場景中的位置,根據(jù)四叉樹的結(jié)構(gòu)加載周圍資源。