最近在项目中写了一个自动检测资源的工具,但在检测的时候有个问题给卡了一下,就是资源的MeshFilter的mesh Miss了,我才开始想的是那就检测一下mesh为null就好了,于是就有了第一版
var mesh = GetComponent<MeshFilter>().mesh;
if(mesh == null)
{
// 说明模型丢失了
}
乍一看好像没啥问题,但是却发现每次检测明明MeshFilter的mesh为None但是却还是判定mesh != null,于是我就翻阅了一下官方文档
大致意思就是说当你没有将网格分配给网格过滤器的时候,会自动创建一个新的网格,如果分配过了就会创建一个副本,如果想避免这种网格复制使用MeshFilter.sharedMesh代替.
于是乎我有去看一下MeshFilter.sharedMesh的官方文档,意思大致是说建议只用于读取数据,不建议写入,因为如果改了所有使用此网格的对象都会受到影响,并且是无法撤销对该网格所做的更改.
于是乎就有了第二段代码,这里用MeshFilter.mesh跟MeshFilter.sharedMesh没啥区别,主要是判断一下mesh的顶点数.
var mesh = GetComponent<MeshFilter>().sharedMesh;
if(mesh == null || mesh.vertexCount <= 0>)
{
// 说明模型丢失了
}
这样就可以判断到了,顶点为0肯定就是一个空的mesh.
修改一下
var mesh = GetComponent<MeshFilter>().sharedMesh;
if(mesh == null || mesh.vertices.Length <= 0>)
{
// 说明模型丢失了
}
这样写会报Not allowed to access vertices on mesh' '这个错,所以改成使用mesh.vertexCount,这个是只读的,获取顶点的长度.
1万+

被折叠的 条评论
为什么被折叠?



