Unity场景网格合并

网格合并有两种方式以及区别

效果都是把使用相同材质球的mesh进行合并

静态就是预先处理会增加包体大小,看需求,如果减包体可以考虑使用动态合并

 

1.勾选静态精选合并

所有被勾选了“Static”的GameObject,其中的Mesh Filter中的mesh都会被合并到 "Combined Mesha (root: scene)" 中

 

2.使用脚本动态合并

        //找到需要合并的节点
        GameObject staticObjects = GameObject.Find("Static");
        if (null == staticObjects)
            return;

        //遍历所有render,把材质球对应的render列表存起来
        Dictionary<Material, List<Renderer>> Material2RendersDic = new Dictionary<Material, List<Renderer>>();
        Renderer[] allRenders = staticObjects.GetComponentsInChildren<Renderer>();
        for (int i = 0; i < allRenders.Length; i++)
        {
            Material mat = allRenders[i].sharedMaterial;
            if (null == mat)
                continue;
            if (!Material2RendersDic.ContainsKey(mat))
                Material2RendersDic.Add(mat, new List<Renderer>());
            Material2RendersDic[mat].Add(allRenders[i]);
        }

        //根据相同材质球的mesh进行合并
        foreach (KeyValuePair<Material, List<Renderer>> mat in Material2RendersDic)
        {
            List<Renderer> RenderList = mat.Value;
            if (RenderList.Count <= 1)
                continue;
            GameObject[] objs = new GameObject[RenderList.Count];
            for (int j = 0; j < mat.Value.Count; j++)
                objs[j] = RenderList[j].gameObject;
            StaticBatchingUtility.Combine(objs, objs[0]);
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值