SceneCombineMesh.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using UnityEngine;
  2. using System.Collections.Generic;
  3. public class SceneCombineMesh : MonoBehaviour
  4. {
  5. MeshRenderer mSMR = null;
  6. MeshFilter mMeshFilter = null;
  7. void Awake()
  8. {
  9. mSMR = GetComponent<MeshRenderer>();
  10. if (mSMR != null)
  11. Object.Destroy(mSMR);
  12. if (mMeshFilter != null)
  13. Object.Destroy(mMeshFilter);
  14. CombineToMesh();
  15. }
  16. public void CombineToMesh()
  17. {
  18. List<CombineInstance> combineInstances = new List<CombineInstance>();
  19. MeshRenderer[] smrList = GetComponentsInChildren<MeshRenderer>();
  20. Material mat = null;
  21. for (int idx = 0; idx < smrList.Length; idx++)
  22. {
  23. MeshRenderer smr = smrList[idx];
  24. if (mat == null)
  25. mat = smr.material;
  26. MeshFilter mf = smr.GetComponent<MeshFilter>();
  27. CombineInstance ci = new CombineInstance();
  28. ci.mesh = mf.sharedMesh;
  29. ci.transform = mf.transform.localToWorldMatrix;
  30. combineInstances.Add(ci);
  31. Object.Destroy(smr.gameObject);
  32. }
  33. mSMR = gameObject.AddComponent<MeshRenderer>();
  34. mMeshFilter = gameObject.AddComponent<MeshFilter>();
  35. mMeshFilter.sharedMesh = new Mesh();
  36. mMeshFilter.sharedMesh.CombineMeshes(combineInstances.ToArray(), true);
  37. mSMR.materials = new Material[] { mat };
  38. }
  39. }