Unity中创建自己的mesh以及动态修改mesh
发布时间
阅读量:
阅读量
开头
最近发现有很多人不知道在unity中可以创建和修改mesh,以为mesh只能从3dmax等软件中导入,所以这篇就相当于科普了。
正文
首先介绍如何创建mesh。

先创建一个空物体,名为test。

然后为这个物体增加 meshrender 和 meshfilter 两个组件
下面就要写将要赋给它的脚本了,先贴上代码,解释在下面。
using UnityEngine;
using System.Collections;
public class Test: MonoBehaviour
{
void Start()
{
Vector3[] newVertices = { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0), new Vector3(1, 0, 0) };
Vector2[] newUV = { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0) };
int[] newTriangles = {0,2,1,0,3,2};
Mesh mesh = new Mesh();
GetComponent<MeshFilter>().mesh = mesh;
mesh.vertices = newVertices;
mesh.uv = newUV;
mesh.triangles = newTriangles;
}
}
要创建一个 mesh 必须要准备好三个必要的数组包括顶点数组三角形数组和 uv 数组。
- 该顶点集合包含了该网格的所有顶点。
例如:newVertices = new Vector3[] { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0), new Vector3(1, 0, 0) }。
其中包含了四个顶点。 - 其中一个包含两个这样的多边形实例。
定义了一个包含两个这样的多边形实例。 - uv数组 是一个vector2数组。
它用于确定每个网格单元在二维空间中的位置参数。
这将在下面演示给大家看。
代码写好之后,把脚本贴到Test物体上,然后设置一个material,如下图:

下面是运行后的图片:

关于为什么UV数组是这样的?你可以将其理解为其四个角落点的UV坐标分别为(0, 0)、(1, 0)、(1, 1)以及另一个点可能有误的设置(此处应为(-1, 1)或者其他值)。如果您希望修改代码中的UV分布情况,则可以将现有代码中的UV数组重新定义为Vector2[] newUV = { new Vector2( -1f, -1f ), new Vector2( -1f, 1f ), ... };这样一来代码修改后的情况将呈现如下形式:

需要注意的一点是,在该顶点数组中所有的顶点坐标均基于模型坐标系确定,在该系统初始生成的Test空对象中设置了相应的原点位置
仅仅是初步构建了二维网格模型。至于如何构建三维网格模型以及进行网格修改等操作,请期待后续详细的讲解与指导吧!
最后
就这样了 如果有错误或疑问,请评论,如果觉得还不错或有帮助,请关注或顶一下,谢谢啦~~~ (´・ω・`)
全部评论 (0)
还没有任何评论哟~
