当前位置:主页 > 查看内容

unity中合并网格

发布时间:2021-06-01 00:00| 位朋友查看

简介:unity中是自带合并网格功能的,并不用开发者遍历网格数据,然后再添加到一个列表中,所以,unity中自带的网格合并功能怎么使用呢? using UnityEngine;using System.Collections; public class Combine : MonoBehaviour{ void Start() { MeshRenderer[] meshRende……

unity中是自带合并网格功能的,并不用开发者遍历网格数据,然后再添加到一个列表中,所以,unity中自带的网格合并功能怎么使用呢?

using UnityEngine;
using System.Collections;
 
public class Combine  : MonoBehaviour
{
    void Start()
    {
        MeshRenderer[] meshRenderers = GetComponentsInChildren<MeshRenderer>();
        Material[] mats = new Material[meshRenderers.Length];
        for (int i = 0; i < meshRenderers.Length; i++)
        {
            mats[i] = meshRenderers[i].sharedMaterial;
        }
        MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();
        CombineInstance[] combine = new CombineInstance[meshFilters.Length];
        for (int i = 0; i < meshFilters.Length; i++)
        {
            mats[i] = meshRenderers[i].sharedMaterial;
            combine[i].mesh = meshFilters[i].sharedMesh;
            combine[i].transform = meshFilters[i].transform.localToWorldMatrix;
            meshFilters[i].gameObject.SetActive(false);
            if (meshFilters[i].gameObject.name != gameObject.name)
            {
                Destroy(meshFilters[i].gameObject);
            }
        }
       
        transform.GetComponent<MeshFilter>().mesh = new Mesh();
        transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine, false);
        transform.gameObject.SetActive(true);
        transform.GetComponent<MeshRenderer>().sharedMaterials = mats;
    }
}

那么这里需要注意的是要获取sharedMaterial,sharedMesh

因为在程序运行时,直接调用Mesh是会报错的,所以要用sharedMesh


本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:中间件PaaS层组件容灾方案及实践 下一篇:没有了

推荐图文


随机推荐