最近在做项目优化,注意到动态创建Mesh时,Unity提供了一套高级方法用于快速创建模型,特此记录学习一下。
前言
关于Mesh的基本概念再次不在阐述,可以参考Unity Mesh 官方文档,介绍的很详细,其中
基础方法包括:SetVertices、SetNormals、SetUVs、SetTriangles、SetIndices、SetColors、SetTangents、SetBoneWeights
高级方法包括:SetVertexBufferParams、SetVertexBufferData、SetIndexBufferParams、SetIndexBufferData、SetSubMesh。
优势
- 使用基础方法有个限制,就是Mesh的最大顶点数量不能超过65535,而高级方法则没有这个限制。
- 高级方法跳过了一些检查,创建速度更快,尤其模型顶点数量较多的情况下,有性能提升,实测时间缩短将近1/3。
示例
基础方法
需要提前准备好模型的数据
属性名 | 含义 | 类型 |
---|---|---|
vertices | 顶点坐标 | Verctor3[] |
normals | 法线 | Verctor3[] |
triangles | 顶点索引 | int[] |
uv | 纹理坐标 | Verctor2[] |
//创建Mesh,并赋值,相当于调用SetVertices、SetNormals、SetTriangles、SetUVs
Mesh mesh = new Mesh();
mesh.vertices = myMeshes[i].vertices;
mesh.normals = myMeshes[i].normals;
mesh.triangles = myMeshes[i].triangles;
mesh.uv = myMeshes[i].uv;
//将Mesh赋值给MeshFilter组件
GameObject gameObject = new GameObject();
MeshFilter mf = gameObject.AddComponent<MeshFilter>();
mf.sharedMesh = mesh;
//给模型赋予材质
MeshRenderer mr = gameObject.AddComponent<MeshRenderer></