任何一个模型都是由若干网格面组成,而每一个面又有若干个三角形组成,也就是说,模型是由若干个三角形面组成的;(字体和图片也是如此)
组成简单模型的组件需要包含以下几个:
MeshImage脚本代码如下:
using UnityEngine;
using System.Collections;
public class MeshImage : MonoBehaviour {
// Use this for initialization
void Start () {
MeshRectangle ();
}
// 创建一个矩形
void MeshRectangle()
{
// 得到网格渲染器对象
MeshFilter mFilter = gameObject.GetComponent<MeshFilter> ();
MeshRenderer mRen = gameObject.GetComponent<MeshRenderer> ();
//矩形的四个顶点坐标
Vector3[] vertices = new Vector3[4];
vertices [0] = new Vector3 (0, 0, 0);
vertices [1] = new Vector3 (5, 0, 0);
vertices [2] = new Vector3 (5, 5, 0);
vertices [3] = new Vector3 (0, 5, 0);
// 三角形顶点索引
int[] triangles = new int[]{0, 1, 2, 2, 3, 0};
//每个顶点的法线
Vector3[] normals = new Vector3[4];
normals [0] = new Vector3 (0, 0, -5);
normals [1] = new Vector3 (0, 0, -5);
normals [2] = new Vector3 (0, 0, -5);
normals [3] = new Vector3 (0, 0, -5);
// UV贴图坐标
Vector2[] uvs = new Vector2[4];
uvs [0] = new Vector2 (0, 0);
uvs [1] = new Vector2 (1, 0);
uvs [2] = new Vector2 (1, 1);
uvs [3] = new Vector2 (0, 1);
//顶点颜色
Color32[] colors32 = new Color32[4];
colors32 [0] = new Color32 (255, 255, 0, 255);
colors32 [1] = new Color32 (255, 255, 0, 255);
colors32 [2] = new Color32 (255, 255, 0, 255);
colors32 [3] = new Color32 (255, 255, 0, 255);
Mesh mesh = new Mesh ();
mesh.hideFlags = HideFlags.DontSave;
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.colors32 = colors32;
mesh.uv = uvs;
mesh.normals = normals;
mFilter.mesh = mesh;
}
// Update is called once per frame
void Update () {
MeshRectangle ();
}
}
通过对以上代码的扩展,运行后的效果如下:
注意:所使用的Shader需要支持顶点色,如NGUI中的Unlit - Text