一、使用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);
}
} 保存合并的meshusing 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
本文深入探讨了在Unity环境中如何利用MeshFilter组件的static属性和代码合并功能来优化场景性能,通过实例展示了如何合并Mesh以减少渲染开销,并提供了解决方案和代码示例,帮助开发者实现资源高效利用。

1万+

被折叠的 条评论
为什么被折叠?



