Unity里的Mesh的SetVertices函数与mesh.vertices的区别

今天使用Unity的时候,需要自己创建Mesh,然后对Mesh里的vertices进行赋值,我发现了有两种写法:

List<Vector3>vertices = new List<Vector3>();
//写法1
mesh.vertices = vertices;
//写法2
mesh.SetVertices(vertices.ToArray());

这两种写法有什么区别呢?

直接对mesh.vertices和mesh.triangles进行赋值是老版本的Untiy输入网格数据的方法,这种方式并不准确,因为mesh.triangles里存储的顶点索引信息并不一定是构成三角形,也可能是Lines,Quad等方式,所以为了区分primitive(图元)的类型,新增了SetIndices函数,用于区别图元的类型。

List<Vector3> verts = new List<Vector3>();
verts.Add(new Vector3(0, 0, 0));
verts.Add(new Vector3(0, 111, 110));
verts.Add(new Vector3(110, 0, 111));

int[] indices = new int[] { 0, 1, 2 };
mesh.Clear();
//新写法
mesh.SetVertices(verts);
mesh.SetIndices(indices, MeshTopology.Triangles, 0);
//旧写法
mesh.vertices = verts.ToArray();
mesh.triangles = indices;

从上面的代码也可以看出,mesh.SetVertices支持的是List数组,而mesh.vertices支持的固定Array数组(2018.3f版本的Unity),所以也可以根据自己数组的类型自行选择用哪个API

值得注意的是,最新版本的Unity,使用SetVertices已经能支持两种格式的数组,以下是新旧版本的Unity对比,可以看出来Unity在慢慢鼓励大家使用新的API:
在这里插入图片描述
在这里插入图片描述

posted @ 2020-03-18 21:42  弹吉他的小刘鸭  阅读(600)  评论(0编辑  收藏  举报