怎么在游戏中判断MeshFilter的mesh为空

依然范特西╮ 提交于 2020-01-07 19:47:10

最近在项目中写了一个自动检测资源的工具,但在检测的时候有个问题给卡了一下,就是资源的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.
 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!