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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值