Unity-Mesh网格合并

Unity中的Mesh网格合并主要有以下几个作用:

  1. 性能优化:合并多个小的网格为一个大网格可以减少Draw Call的数量,从而提高渲染性能。每个Draw Call都需要CPU和GPU之间的通信,合并网格可以显著降低这种开销。

  2. 减少内存使用:合并网格可以减少内存中的对象数量,尤其是在场景中有大量相似对象时,这样可以节省内存资源。

  3. 简化碰撞检测:合并后的网格可以简化碰撞体的管理,减少需要计算的碰撞体数量,从而提高物理计算的效率。

  4. 提高渲染效率:通过合并网格,可以利用GPU的批处理能力,提升渲染效率,尤其是在使用静态物体时。

  5. 简化场景管理:合并网格可以使场景中的对象管理更加简单,减少场景中的对象数量,便于管理和优化。

总之,Mesh网格合并是Unity中一种常用的优化手段,能够有效提升游戏的性能和资源利用率。以下是简易代码展示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CombinMesh : MonoBehaviour
{
    public MeshFilter[] meshes;
    public MeshFilter meshFilter;

    public MeshRenderer[] renderers;
    public MeshRenderer meshRenderer;

    // Start is called before the first frame update
    void Start()
    {
        Mesh mesh = new Mesh();
        List<Material> materials = new List<Material>();
        List<CombineInstance> combines = new List<CombineInstance>();
        for (int i = 0; i < meshes.Length; i++)
        {
            CombineInstance combine = new CombineInstance();
            combine.mesh = meshes[i].mesh;
            combine.transform = meshes[i].transform.localToWorldMatrix;  //localToWorldMatrix世界矩阵
            combines.Add(combine);
            foreach (var item in renderers[i].materials)
            {
                materials.Add(item);
            }
        }
        mesh.CombineMeshes(combines.ToArray(), false);
        meshFilter.mesh = mesh;
        meshRenderer.materials = materials.ToArray();
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

建立一个空对象,将脚本挂在空对象身上,给空对象添加MeshFilter和MeshRenderer组件,再将Cube和Capsule都拖入两个集合中,具体如下:

原始图搭建:

运行效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值