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:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Unity中可以使用Mesh类来创建和修改立体模型的网格。为了在Unity中实现网格的弯曲效果,可以采用以下步骤: 1. 创建一个Mesh对象:在Unity中创建一个空白的Mesh对象,用于后续的修改。 2. 添加顶点坐标信息:使用Mesh类的vertices属性,添加需要弯曲的模型的顶点坐标信息。可以通过手动输入顶点坐标或者通过程序生成。 3. 设置顶点索引:使用Mesh类的triangles属性,设置模型的三角形面片的顶点索引。这些索引定义了模型的网格结构。 4. 添加法线信息:使用Mesh类的normals属性,添加每个顶点的法线方向。法线方向是用于模型渲染和光照计算的重要信息。 5. 弯曲网格:根据需求,可以采用不同的技术来弯曲网格。比如,可以通过修改顶点坐标来实现弯曲效果。可以使用曲线函数,对顶点的x、y或z坐标进行修改,从而使得网格呈现弯曲的效果。 6. 更新Mesh:完成网格的弯曲后,使用Mesh类的RecalculateBounds和RecalculateNormals方法来更新网格的边界和法线信息。 7. 渲染网格:将弯曲后的网格渲染到场景中。可以使用MeshFilter和MeshRenderer组件来渲染并显示网格。 需要注意的是,网格的弯曲会改变模型的形状和结构,所以在进行任何修改之前,最好先做好备份或保存原始的模型数据。另外,为了实现更高级的弯曲效果,还可以使用Unity的Shader编写自定义的材质和渲染效果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值