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
来源: https://www.qcloud.com/developer/article/1829487