Unity中的MergeMesh

(合并前)

这里我做了N个小球 叠加在一起
在这里插入图片描述
可以看到这些小球的mesh很复杂。
在这里插入图片描述
运行起来看一下
在这里插入图片描述
batches达到了549,这是一个毁灭性的现象。会造成大量的draw call,导致性能降低。

接下来进行 mergemesh

Batching Static

其实可以设置为Batching Static 来达到相似的目的,但是这样有个局限性,就是这样设定了的物体不能移动,因为相当于强制让他执行静态批处理。
在这里插入图片描述

(合并后)

在这里插入图片描述
可以发现batches降低为9.

观察合并后的Filter,和之前没什么两样,而且可以移动
在这里插入图片描述

using UnityEngine;
public class ChinarMergeMesh : MonoBehaviour
{
    void Start()
    {
        MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();   //获取 所有子物体的网格
        CombineInstance[] combineInstances = new CombineInstance[meshFilters.Length]; //新建一个合并组,长度与 meshfilters一致
        for (int i = 0; i < meshFilters.Length; i++)                                  //遍历
        {
            combineInstances[i].mesh = meshFilters[i].sharedMesh;                   //将共享mesh,赋值
            combineInstances[i].transform = meshFilters[i].transform.localToWorldMatrix; //本地坐标转矩阵,赋值
        }
        Mesh newMesh = new Mesh();                                  //声明一个新网格对象
        newMesh.CombineMeshes(combineInstances);                    //将combineInstances数组传入函数
        gameObject.AddComponent<MeshFilter>().sharedMesh = newMesh; //给当前空物体,添加网格组件;将合并后的网格,给到自身网格
        //到这里,新模型的网格就已经生成了。运行模式下,可以点击物体的 MeshFilter 进行查看网格
        #region 以下是对新模型做的一些处理:添加材质,关闭所有子物体,添加自转脚本和控制相机的脚本
        gameObject.AddComponent<MeshRenderer>().material = Resources.Load<Material>("Materials/Koala"); //给当前空物体添加渲染组件,给新模型网格上色;
        foreach (Transform t in transform) t.gameObject.SetActive(false);             //禁用掉所有子物体
        #endregion
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值