Q1:怎樣動態加載Navmesh?
目前Navmesh不支持動態加載,只能隨場景一起加載, 因此可以考慮將帶有Navmesh的場景打包成AssetBundle,然后使用LoadLevel加載AssetBundle中的場景。
Navmesh的動態加載已經在Unity的Roadmap中。而當前,Navmesh是和場景綁定的,也就是說目前只能通過LoadLevel(不支持LoadLevelAdditive的加載方式)來加載場景的同時,自動加載對應的Navmesh數據。替代方案是:將多個“場景Prefab”的Navmesh 合并到同一個場景中烘焙好(互不重疊),然后再將這些“場景Prefab”分離到各個單獨的場景中去;在運行階段,Navmesh隨著第一個場景一次性加載,而對于其他的場景物件,再通過LoadLevelAdditive來加載對應的場景即可。缺點是為了使場景物件對齊Navmesh,在場景制作時就不能出現坐標上的重疊,因此僅供參考。
在Unity 5.x下,Lightmap的動態加載,需要通過腳本將烘焙時每個物件的Lightmapindex和Lightmapscaleoffset記錄下,并在運行時動態加載后設置回去的方式來實現。因為目前Lightmapindex和Lightmapscaleoffset信息是和場景綁定在一起,儲存在Lightmapsnap.assets 中,發布時也是放在場景信息中,因此不會記錄在Prefab 上。
Q2:如下圖:我在Profiler中看到這些沒有引用的資源,他們是否還在內存中?
Blog-TechSharing_7-9.jpg
是的,凡是在Unity Profiler中能看到的資源就會保留在內存中。對于這種資源,在切換場景時調一下UnloadUnusedAssets API就可以釋放。