一、使用gameobject的static属性设置
注意的是,所谓静态就是静止的,你如果要改变它位置,就不是静态了,静态物体在脚本加载的时候就开始渲染,不随着update 每侦更新,你如果要移动物体,就必然要重新刷新,就是动态了 。
所有被勾选了“Static”的GameObject,其中的Mesh Filter中的mesh都会被合并到 "Combined Mesh (root: scene)" 中。
二、使用代码合并
结合网格有利于性能最优化。如果mergeSubMeshes为true,所有的网格会被结合成一个单个子网格。否则每一个网格都将变成单个不同的子网格。如果所有的网格共享同一种材质,设定它为真。如果useMatrices为false,在CombineInstance结构中的变换矩阵将被忽略。
using UnityEngine;
using System.Collections;
public class CombineMeshes : MonoBehaviour
{
void Start()
{
MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();
CombineInstance[] combine = new CombineInstance[meshFilters.Length];
int i = 0;
while (i < meshFilters.Length)
{
combine[i].mesh = meshFilters[i].sharedMesh;
combine[i].transform = meshFilters[i].transform.localToWorldMatrix;
meshFilters[i].gameObject.SetActive(false);
i++;
}
transform.GetComponent<MeshFilter>().mesh = new Mesh();
transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine);
transform.gameObject.SetActive(true);
}
}
保存合并的mesh
using UnityEngine;
using System.Collections;
using UnityEditor;
public class EditorTools : MonoBehaviour
{
[MenuItem("Tools/Save Combine Mesh")]
public static void SaveMesh()
{
Mesh m = Selection.activeGameObject.GetComponent<MeshFilter>().sharedMesh;
AssetDatabase.CreateAsset(m, "Assets/tmp/cmbMesh.asset");
AssetDatabase.SaveAssets();
}
}
分别来自:
http://www.cnblogs.com/yaukey/p/unity_mesh_combine.html
http://blog.csdn.net/awnuxcvbn/article/details/17531195