文章目录
- 前言
- 一、Mesh组成
- 二、使用步骤
- 三、效果
- 四、总结
前言
Mesh(网格)是一种常用的3D图形表示方法,它由顶点,法线,UV 坐标,和三角形等组成。您可以使用 Mesh 类的方法来创建或修改网格,也可以使用 MeshFilter 组件或 MeshRenderer 组件来显示网格。UnityMesh 可以用于制作各种 3D 场景和效果,例如地形,水面,粒子,布料等。
一、Mesh组成
顶点(vertex):顶点是物体表面上的点,用 Vector3 类型表示它们在局部空间中的位置。
法线(normal):法线是顶点的方向,用 Vector3 类型表示它们在局部空间中的单位向量。
UV 坐标(uv):UV 坐标是顶点的纹理坐标,用 Vector2 类型表示它们在纹理图像中的位置。
三角形(triangle):三角形是物体表面上的面,用整数数组表示它们由哪些顶点组成。每个三角形由三个顶点索引构成,顶点索引是顶点数组中的位置。
二、使用步骤
首先,我们需要在 Unity 中创建一个空的 3D 项目。然后,我们需要在场景中添加一个空的游戏对象,我们可以把它命名为 “Triangle” ,这将是我们的网格生成器。为了让我们的网格能够显示在屏幕上,我们还需要给它添加一些组件,分别是:
MeshFilter:这个组件允许我们上传和存储我们的网格数据,以供 Unity 的图形 API 渲染。
MeshRenderer:这个组件负责渲染我们的网格,我们给它指定一个材质来改变网格的颜色和外观。
C# 脚本:这个组件是我们编写网格生成逻辑的地方,我们把它命名为 “Test”
下图是我们的游戏对象在inspector面板中的样子:
首先,我们需要在游戏对象上添加MeshFilter组件和MeshRenderer组件。这可以通过RequireComponent属性来实现,它会在挂载脚本的时候,自动添加指定的组件。
//挂载脚本的时候,自动添加下面的组件
[RequireComponent(typeof(MeshFilter)),RequireComponent(typeof(MeshRenderer))]
然后,我们需要在Start方法中创建一个Mesh对象,并获取MeshFilter组件的引用。我们可以使用new关键字来实例化一个Mesh对象,并赋值给一个变量。我们还可以给mesh一个名字,方便在编辑器中识别。我们可以使用GetComponent方法来获取MeshFilter组件的引用,并将mesh赋值给它的mesh属性。
void Start()
{
//创建一个Mesh对象
Mesh mesh = new Mesh();
//获取MeshFilter组件的引用
var meshFilter = GetComponent<MeshFilter>();
//将mesh赋值给MeshFilter组件的mesh属性
meshFilter.mesh = mesh;
//给mesh一个名字
mesh.name = "Mesh01";
}
接下来,我们需要设置mesh的顶点和三角形。顶点是一个Vector3数组,表示三维空间中的点的坐标。三角形是一个int数组,表示顶点数组中的索引,每三个索引构成一个三角形。我们可以使用mesh的vertices属性和triangles属性来设置这些信息。
private Vector3[] GetVertexs()
{
//返回一个包含三个顶点的数组
return new[]
{
new Vector3(0, 0, 0), //第一个顶点,索引为0
new Vector3(1, 0, 0), //第二个顶点,索引为1
new Vector3(1, 1, 0), //第三个顶点,索引为2
};
}
private int[] GetTriangles()
{
//返回一个包含三个索引的数组
return new[]
{
0,1,2 //构成一个三角形的索引
};
}
void Start()
{
//设置mesh的顶点
mesh.vertices = GetVertexs();
//设置mesh的三角形
mesh.triangles = GetTriangles();
}
这样,我们就完成了一个三角面的mesh的创建。我们可以在场景中添加一个空的游戏对象,并将Test脚本挂载到上面。然后,我们可以在Game视图中看到一个紫色的三角形,这就是我们创建的mesh。
如果我们想要给mesh添加一些颜色,我们还需要设置mesh的材质(material)。材质是一个Material对象,它定义了mesh的外观,如颜色、光照、纹理等。我们可以使用MeshRenderer组件的material属性来设置这些信息。
void Start()
{
//获取MeshRenderer组件的引用
var meshRenderer = GetComponent<MeshRenderer>();
//创建一个Material对象
Material material = new Material(Shader.Find("Standard"));
//设置材质的颜色为红色
material.color = Color.red;
//将材质赋值给MeshRenderer组件的material属性
meshRenderer.material = material;
}
这样,我们就给mesh添加了一些颜色。我们可以在Game视图中看到一个红色的三角形,这就是我们创建的mesh。
三、效果
四、总结
你已经学会了如何在 Unity 中简单地创建一个三角面。这是一个很基础的教程,但是它涉及了一些重要的概念,比如网格,顶点,三角形,索引,坐标等。你可以尝试修改你的代码,创建不同的形状,比如四边形,五边形,甚至更复杂的多边形。你也可以给你的网格添加一些颜色,纹理,光照等效果,让它更加美观