u3d打包,打个小u3d场景资源下载为什么都打进来了

你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
我做了一个小Demo
三个场景(SceneA,SceneB,SceneC),默认进入SceneB
其中SceneA有一个Sprite,引用了一个大约为5.3MB(解压后在显存中的大小)的纹理
SceneB 和 SceneA 仅有切换场景的按钮
测试环境为Android真机测试步骤:
1? 首先进入SceneB , 此时显存占用2.8MB(因为使用NGUI)
2? 进入SceneA, Sprite被加载 显存使用变为8.2MB ( 2.8+5.3 ~=8.2)
3? 切换到SceneB, 显存无变化 仍旧8.2MB
4? 切换到SceneC, 显存降低到2.8(该Sprite用到的纹理被卸载)
================================
为什么在切换到SceneB时候没有释放显存呢?
的确是这样,这是Unity的问题,在加载下一个场景的时候,其实当前场景内存还没有被释放,直到你再次加载一个场景的时候,第一个场景的资源才会被真正卸载。
所以我们在实际项目中一般做法是:构建一个单独的场景,专门用来做Loading使用,同时异步加载下一个场景,这样既可以提示玩家等待,也可以是否第一个场景的资源!
有一片博客说明了这个问题。Unity里面会隔一个场景卸载内存。具体博客,找到后联系你,其实也是说明你测试的内容,得出的结论就是Unity会隔一个场景卸载内存。我看前面也有说到loading场景的作用。目的就是为了隔一个场景。也为了不让主城场景和副本场景的资源同时在内存中,爆内存。loading场景是没什么资源的,都是在加载另一个场景。主城进副本后就把主城资源卸载了,经过loading回主城也是一个原理。
涨姿势了,终于明白为啥Loading独占Scene了
又做了进一步测试
1? SceneB->SceneA (显存涨到8.2)
2? SceneA->SceneC (显存没变)
3? SceneC->SceneC (显存降低到2.8)
也就是重复进入同一个场景2次 显存被回收了
你自己再用GC回收一下看看什么情况?不知道Unity底层对回收是如何操作的?不好说清楚为啥是这样的?
Resources.UnloadUnusedAssets,调用过这个吗
Unity 5 测试了,没有这种情况。。。。。
在unity5测试了,确实没有这个问题了
为什么我测试的内存没有完全释放?
要回复问题请先或
浏览: 4559
关注: 13 人

参考资料

 

随机推荐