unity CombineMeshes合并网格

mesh和sharedMesh的区别

因为下面要用到sharedMesh,所以我们先来了解一下mesh和sharedMesh有什么区别。
mesh:mesh改变的话,会新建一个mesh出来,再进行赋值,原mesh不会被改变,这使得内存增加。
sharedMesh:sharedMesh改变的话,原mesh也会被改变,但不会使得内存增加。

sharedMesh是公用的,是引用传递。而mesh是值传递,是各自拥有的实例。sharedMesh改变,则所有的使用到此mesh的都改变。mesh消耗更多的内存,各有各的优点。

CombineMeshes合并网格

在这里插入图片描述
我们选取图中某个对象做为父对象,将其他两个对象作为它的子对象。

并新建一个脚本,添加到父对象上。脚本如下:

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


//[RequireComponent(typeof(MeshRenderer), typeof(MeshFilter))]
public class CombineMesh : MonoBehaviour
{
    void Start()
    {
        MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();       //获取自身和所有子物体中所有MeshFilter组件
        MeshRenderer[] meshRenderer = GetComponentsInChildren<MeshRenderer>();  //获取自身和所有子物体中所有MeshRenderer组件
        CombineInstance[] combine = new CombineInstance[meshFilters.Length];    //创建合并实例
        Material[] mats = new Material[meshRenderer.Length];                    //新建材质球数组

        for (int i = 0; i < meshFilters.Length; i++)
        {
            mats[i] = meshRenderer[i].sharedMaterial;                           //获取材质球列表
            combine[i].mesh = meshFilters[i].sharedMesh;
            combine[i].transform = meshFilters[i].transform.localToWorldMatrix;
            meshFilters[i].gameObject.SetActive(false);
            //Destroy(meshFilters[1].gameObject);
            //Destroy(meshFilters[2].gameObject);
        }

        transform.GetComponent<MeshFilter>().mesh = new Mesh();                 //新建一个mesh赋值给它
        transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine, false);//为mesh.CombineMeshes添加一个 false 参数,表示并不是合并为一个网格,而是一个子网格列表

        transform.GetComponent<MeshRenderer>().sharedMaterials = mats;          //为合并后的GameObject指定材质

        transform.gameObject.SetActive(true);
    }
}

运行后,子物体隐藏了,你也可以将子物体销毁,效果一样的,只需要父物体就可以了,因为父物体的Mesh Filter和Mesh Menderer都改变了。
效果图如下:
在这里插入图片描述
我们可以看到,三个物体已经合并成一个物体了,因为网格合并了。

发布了15 篇原创文章 · 获赞 0 · 访问量 251

猜你喜欢

转载自blog.csdn.net/weixin_43839583/article/details/103461560
今日推荐