关注

为什么在内存中看到网格的两个参数?

问题

  • 在内存分析器中,我可以看到一个网格的两个参数,但是场景中只有一个实例。

原因

当模型使用Read/Write Enabled 标识被载入的时候会发生这样的情况。

激活网格可读将会在系统内存中保存额外副本(原始参考和脚本访问副本)

无论标识是否启用(但它始终保持在视频内存中的引用),Unity在系统内存中保存额外副本的其他原因:

  • 如果网格被用作Skinned Mesh
  • 如果网格是动态批处理的候选对象。
  • 粒子系统选择网格作为发射器。

在如下特定情况的时候,当网格被用作网格碰撞器,这个选项也需要被激活。

  • 负缩放(例如(-1, 1, 1))
  • 剪切变换(例如当旋转的网格具有缩放的父变换时)。

解决方案

除非您需要获取网格的顶点数据,或者有任何满足上述特定情况的网格,需要将标识设置为flase,这样可以节省一些内存。(在脚本中使用Mesh.isReadable查看网格是否可读)

如果您只想对网格进行一次更新并不想再修改,可以调用Mesh.UploadMeshData(true),这样网格数据无法被脚本访问,不会在系统内存中保留副本。

请记住,在运行时访问被标示为不可读的网格的任何数据,会抛出错误信息。

更多信息

想要了解更多信息,请参考下面的文档:

 

这篇文章有帮助吗?
0 人中有 0 人觉得有帮助
还有其它问题?提交请求

0 评论

登录写评论。