Mesh是Unity内的一个组件,称为网格组件。
· Mesh 网格
· Mesh Renderer 网格渲染器
· Mesh Collider 网格碰撞器
Mesh:是指模型的网格,建模就是建网格。细看Mesh,可以知道Mesh的主要属性内容包括顶点坐标,法线,纹理坐标,三角形绘制序列等其他有用属性和功能。因此建网格,就是画三角形;画三角形就是定位三个点。
MeshFilter:内包含一个Mesh组件,可以根据MeshFilter获得模型网格的组件,也可以为MeshFilter设置Mesh内容。
MeshRender:是用于把网格渲染出来的组件。MeshFilter的作用就是把Mesh扔给MeshRender将模型或者说是几何体绘制显示出来。
MeshCollider:网格碰撞器利用一个网格资源并在其上构建碰撞器。对于复杂网状模型上的碰撞检测,它要比应用原型碰撞器精确的多。标记为凸起的(Convex )的网格碰撞器才能够和其他网格碰撞器发生碰撞。
它们之间的关系大概就是Unity中的对象就是GameObject,每个GameObject都可以有一个MeshFilter组件(也可以没有),该组件又有Mesh属性(这个一定有),而该属性又有顶点坐标,法线等属性。而如果GameObject里有MeshFilter,则必须要Mesh Renderer才能将此网格渲染出来,不然是看不见该网格的。
示例:
1.创建一个GameObject并添加MeshFilter以及MeshRender组件,并创建一个“CreateMesh.cs”脚本给它。
2.获取该对象的filter组件,并创建一个mesh给它。
3.为该mesh设置属性,这里先设置顶点,然后将三角形与顶点绑定
1using UnityEngine;
2using System.Collections;
3
4public class CreateMesh : MonoBehaviour {
5
6 privateMeshFilter filter;
7 private Meshmesh;
8
9 // Use this for initialization
10 void Start () {
11 //获取GameObject的Filter组件
12 filter = GetComponent<MeshFilter>();
13 //并新建一个mesh给它
14 mesh =new Mesh();
15 filter.mesh = mesh;
16
17 //初始化网格
18 InitMesh();
19 }
20
21 // Update is called once per frame
22 void Update () {
23
24 }
25
26 /// <summary>
27 /// Inits the mesh.
28 /// </summary>
29 void InitMesh()
30 {
31 mesh.name ="MyMesh";
32
33 //为网格创建顶点数组
34 Vector3[] vertices =new Vector3[4]{
35 new Vector3(1,1, 0),
36 new Vector3(-1,1, 0),
37 new Vector3(1, -1,0),
38 new Vector3(-1, -1,0)
39 };
40
41 mesh.vertices = vertices;
42
43 //通过顶点为网格创建三角形
44 int[] triangles =new int[2 *3]{
45 0,3, 1, 0,2, 3
46 };
47
48 mesh.triangles = triangles;
49 }
50 }