最近在项目中写了一个自动检测资源的工具,但在检测的时候有个问题给卡了一下,就是资源的MeshFilter的mesh Miss了,我才开始想的是那就检测一下mesh为null就好了,于是就有了第一版
var mesh = GetComponent<MeshFilter>().mesh;
if(mesh == null)
{
// 说明模型丢失了
}
乍一看好像没啥问题,但是却发现每次检测明明MeshFilter的mesh为None但是却还是判定mesh != null,于是我就翻阅了一下官方文档
大致意思就是说当你没有将网格分配给网格过滤器的时候,会自动创建一个新的网格,如果分配过了就会创建一个副本,如果想避免这种网格复制使用MeshFilter.sharedMesh代替.
于是乎我有去看一下MeshFilter.sharedMesh的官方文档,意思大致是说建议只用于读取数据,不建议写入,因为如果改了所有使用此网格的对象都会受到影响,并且是无法撤销对该网格所做的更改.
大致明白点了,那我判断MeshFilter.sharedMesh为空不就行了,于是有了第二段代码
var mesh = GetComponent<MeshFilter>().sharedMesh;
if(mesh == null)
{
// 说明模型丢失了
}
发现还是不行,于是我想了一下,难道是miss了然后自动给生成了一个空网格,于是带着这个想法写了第三个判断
var mesh = GetComponent<MeshFilter>().sharedMesh;
if(mesh == null || mesh.vertices.Length <= 0>)
{
// 说明模型丢失了
}
这样就可以判断到了,顶点为0肯定就是一个空的mesh.
来源:CSDN
作者:Marccco
链接:https://blog.csdn.net/Marccco/article/details/103878219