一,介绍
Mesh类:通过脚本创建或是获取网格的类,网格包含多个顶点和三角形数组。顶点信息包含坐标和所在面的法线。
unity中3D的世界的所有图形全部都是由三角形构成的。
比如unity已经装配好的几种图形我们可以看一下:
我们可以在unity中通过Mesh类来绘制图形。
所以在我们绘制其它图形之前,首先完成一个小目标,画一个三角形。
二,绘制三角形
首先做准备工作:
1.在场景中创建一个空物体,并挂载MeshRenderer和MeshFilter组件。//我们先不考虑碰撞器的问题,所以不添加collider
2.创建一个默认材质,拖入MeshRenderer组件中,为可视化做准备。
3.创建一个脚本,挂载在空物体上。然后开始编辑代码
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour
{
// 网格渲染器
MeshRenderer meshRenderer;
// 网格过滤器
MeshFilter meshFilter;
// 用来存放顶点数据
List<Vector3> verts; // 顶点列表
List<int> indices; // 序号列表
private void Start()
{
verts = new List<Vector3>();
indices = new List<int>();
meshRenderer = GetComponent<MeshRenderer>();
meshFilter = GetComponent<MeshFilter>();
Generate();
}
public void Generate()
{
// 把顶点和序号数据填写在列表里
AddMeshData1();//三角形
// 用列表数据创建网格Mesh对象
Mesh mesh = new Mesh();
mesh.SetVertices(verts);
//mesh.vertices = verts.ToArray();
mesh.SetIndices(indices, MeshTopology.Triangles, 0);
//mesh.triangles = indices.ToArray();
// 自动计算法线
mesh.RecalculateNormals();
// 自动计算物体的整体边界
mesh.RecalculateBounds();
// 将mesh对象赋值给网格过滤器,就完成了
meshFilter.mesh = mesh;
}
// 填写顶点和序号列表
void AddMeshData1()
{
verts.Add(new Vector3(0, 0, 0));
verts.Add(new Vector3(0, 0, 1));
verts.Add(new Vecto