问题
- 在内存分析器中,我可以看到一个网格的两个参数,但是场景中只有一个实例。
原因
当模型使用Read/Write Enabled 标识被载入的时候会发生这样的情况。
激活网格可读将会在系统内存中保存额外副本(原始参考和脚本访问副本)
无论标识是否启用(但它始终保持在视频内存中的引用),Unity在系统内存中保存额外副本的其他原因:
- 如果网格被用作Skinned Mesh
- 如果网格是动态批处理的候选对象。
- 粒子系统选择网格作为发射器。
在如下特定情况的时候,当网格被用作网格碰撞器,这个选项也需要被激活。
- 负缩放(例如(-1, 1, 1))
- 剪切变换(例如当旋转的网格具有缩放的父变换时)。
解决方案
除非您需要获取网格的顶点数据,或者有任何满足上述特定情况的网格,需要将标识设置为flase,这样可以节省一些内存。(在脚本中使用Mesh.isReadable查看网格是否可读)
如果您只想对网格进行一次更新并不想再修改,可以调用Mesh.UploadMeshData(true),这样网格数据无法被脚本访问,不会在系统内存中保留副本。
请记住,在运行时访问被标示为不可读的网格的任何数据,会抛出错误信息。
更多信息
想要了解更多信息,请参考下面的文档:
- ModelImporter.isReadable script reference documentation
- Mesh.isReadable script reference documentation
- Mesh.UploadMeshData script reference documentation
评论
0 条评论
文章评论已关闭。