Q1:怎樣動態(tài)加載Navmesh?
目前Navmesh不支持動態(tài)加載吏祸,只能隨場景一起加載烘嘱, 因此可以考慮將帶有Navmesh的場景打包成AssetBundle赚导,然后使用LoadLevel加載AssetBundle中的場景被因。
Navmesh的動態(tài)加載已經(jīng)在Unity的Roadmap中卿拴。而當(dāng)前,Navmesh是和場景綁定的氏身,也就是說目前只能通過LoadLevel(不支持LoadLevelAdditive的加載方式)來加載場景的同時巍棱,自動加載對應(yīng)的Navmesh數(shù)據(jù)。替代方案是:將多個“場景Prefab”的Navmesh 合并到同一個場景中烘焙好(互不重疊)蛋欣,然后再將這些“場景Prefab”分離到各個單獨(dú)的場景中去;在運(yùn)行階段如贷,Navmesh隨著第一個場景一次性加載陷虎,而對于其他的場景物件,再通過LoadLevelAdditive來加載對應(yīng)的場景即可杠袱。缺點(diǎn)是為了使場景物件對齊Navmesh尚猿,在場景制作時就不能出現(xiàn)坐標(biāo)上的重疊,因此僅供參考楣富。
在Unity 5.x下凿掂,Lightmap的動態(tài)加載,需要通過腳本將烘焙時每個物件的Lightmapindex和Lightmapscaleoffset記錄下纹蝴,并在運(yùn)行時動態(tài)加載后設(shè)置回去的方式來實(shí)現(xiàn)庄萎。因?yàn)槟壳癓ightmapindex和Lightmapscaleoffset信息是和場景綁定在一起,儲存在Lightmapsnap.assets 中塘安,發(fā)布時也是放在場景信息中糠涛,因此不會記錄在Prefab 上。
Q2:如下圖:我在Profiler中看到這些沒有引用的資源兼犯,他們是否還在內(nèi)存中忍捡?
是的集漾,凡是在Unity Profiler中能看到的資源就會保留在內(nèi)存中。對于這種資源砸脊,在切換場景時調(diào)一下UnloadUnusedAssets API就可以釋放具篇。