头图

1)MemoryProfiler中Graphics/No Name内存怎么排查
2)通过代码加载出来的Mesh,释放的时候该怎么处理
3)动态解析顶点数据加载出来的Mesh还需要做对象池吗
4)MeshCollider重刷Bound怎么做


这是第410篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:community.uwa4d.com
UWA QQ群:793972859

Memory

Q:移动端项目,发现某个场景里内存上升很快、但切场景又能回落回去。在Memory Profiler里看发现是Graphics下面的<No Name>,怎么排查?Unity版本是2022.3.37。

A:这个我们之前也遇到过,可以看下这个场景是不是用了发射Mesh的粒子?应该是临时生成的网格都造成了内存占用,虽然没有引用,但要在下次场景切换RUUA的时候才自动卸载。

该回答由UWA提供,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/673af015682c7e5cd61bf994


Memory

Q1:请问以下这样的一个通过代码加载出来的Mesh,释放的时候该怎么处理呢?

我现在刷新一下LOD内存就涨一次,一直不释放:

我是直接Destroy的GameObject,我的Mesh和贴图都是读取的本地二进制里的数据解析出来的,请问怎么处理呢?

A1:把Mesh和Texture分别都Destroy。

Q2:这个材质呢?我所有的Mesh都是用的一个Material。

A2:一样,所有New出来的Asset都需要Destroy,你需要管理什么时候不用再Destroy。

Q3:没有顺序要求吗? 是Texture、Material、Mesh、GameObject这样的依次删除?

A3:没有顺序要求。你要管理好使用状况,别还在用就被Destroy就行了。

感谢清泉石上流@UWA问答社区提供了回答

Memory

Q:如果我要做对象池,比如做Mesh的对象池,由于我的Mesh都是动态解析顶点数据加载出来的,对于这种情况做对象池还有意义么?比如我放一个Mesh到对象池里,下次取出来用的时候我肯定要重刷所有顶点的,这个和重新new一个Mesh出来是不是差不多了,请问这个要怎么解决呢?

A:Mesh不需要对象池,GameObject这种如果频繁生成销毁可以做对象池。对象池要求你塞进去的东西和拿出来的是同样的才有意义。

不用的Mesh你可以放到一个列表里面来删除,就是过一段时间还没人用再删,防止摄像机移动回来又要加载。

感谢jump晃悠@UWA问答社区提供了回答

Physics

Q:请问MeshCollider重刷Bound怎么做?不想使用.sharedMesh赋值的方式,我使用SetMinMax但没生效。

针对以上问题,有经验的朋友欢迎转至社区交流:
https://answer.uwa4d.com/question/673aef223d306f3e9d594d93

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859


侑虎科技
62 声望21 粉丝

UWA官网:[链接]


引用和评论

0 条评论