您的位置:首页 > 移动开发 > Unity3D

unity 脚本创建 MESH(网格)

2017-12-21 11:46 573 查看
Unity 脚本创建 Mesh

网格由点面 , 组成 , 每个面是三个顶点构成

代码如下:

using UnityEngine;
using System.Collections;

public class mesh01 : MonoBehaviour {

// Use this for initialization
void Start () {
CreatePlane ();
}

// Update is called once per frame
void Update () {

}

void  CreatePlane(){
GameObject plane = new GameObject ();
plane.name  = "plane";
//  添加组件
MeshFilter mfilter =plane.AddComponent<MeshFilter> ();
MeshRenderer render =   plane.AddComponent<MeshRenderer> ();
// 添加默认的材质
render.material=new Material(Shader.Find("Diffuse"));
//mfilter.mesh  = new Mesh ();
Mesh mesh = mfilter.mesh;
//  设置三个顶点
mesh .vertices = new Vector3[] {
new Vector3 (0, 0, 0),
new Vector3 (0, 1, 0),
new Vector3 (1, 1, 0)
};
//  设置三角形 (面)  这里 三个点的顺序 应该有(顺时针法则)
mesh.triangles = new int[]{
0,1,2
};
// 重新计算法线
mesh.RecalculateNormals ();
}
}


运行结果



三角形面的顺时针法则 (这个法则是我个人的叫法 不知相关是否有特定的名称。)

我们修改一下代码 在每一个顶点上添加一个物体以作说明

void  CreatePlane(){
GameObject plane = new GameObject ();
plane.name  = "plane";
//  添加组件
MeshFilter mfilter =plane.AddComponent<MeshFilter> ();
MeshRenderer render =   plane.AddComponent<MeshRenderer> ();
// 添加默认的材质
render.material=new Material(Shader.Find("Diffuse"));
//mfilter.mesh  = new Mesh ();
Mesh mesh = mfilter.mesh;
//  设置三个顶点
mesh .vertices = new Vector3[] {
new Vector3 (0, 0, 0),
new Vector3 (0, 1, 0),
new Vector3 (1, 1, 0)
};

GameObject a0 = GameObject.CreatePrimitive (PrimitiveType.Cube);
a0.transform.position = mesh .vertices [0];
Vector3 miniScale = new Vector3 (0.1f, 0.1f, 0.1f);
a0.transform.localScale = miniScale;
a0.GetComponent<MeshRenderer> ().material.color = Color.red;

GameObject a1 = GameObject.CreatePrimitive (PrimitiveType.Sphere);
a1.transform.position = mesh .vertices [1];
a1.transform.localScale = miniScale;
a1.GetComponent<MeshRenderer> ().material.color = Color.green;

GameObject a2 = GameObject.CreatePrimitive (PrimitiveType.Cylinder);
a2.transform.position = mesh .vertices [2];
a2.transform.localScale = miniScale;
a2.GetComponent<MeshRenderer> ().material.color = Color.blue;
//  设置三角形 (面)
mesh.triangles = new int[]{
0,1,2
};
// 重新计算法线
mesh.RecalculateNormals ();
}


结果



0,1,2 顶点 分别是红方块 , 绿球 , 蓝圆柱

在这个角度 (主摄相机 是默认位置方向 位置(0,1,-10) 方向(0,0,0) )。就是在 Z 为-10 的位置看原点 (严格来说应该是看向 0,1,0 位置) 方向 是正Z 轴方向。 我们可以看到 0,1,2 顺序 的三角而 这时 是顺时针 下 —-> 上——> 右上 , 这时可以看到面

然后 我们 再设置一下主摄相机 的位置 和方向 位置 (0,1 ,10) 旋转(0,180,0)

结果



在这个结果 是摄相机 从Z =10 的位置看 原点, 方向为负Z轴, 0,1,2 的三角面 是逆时针

下 ——》上 ——》 上右 这时看不到三角面(因为三角面的背面是不渲染的)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息