Unity 通过Mesh网格渲染绘制图形与字体

任何一个模型都是由若干网格面组成,而每一个面又有若干个三角形组成,也就是说,模型是由若干个三角形面组成的;(字体和图片也是如此)

组成简单模型的组件需要包含以下几个:



MeshImage脚本代码如下:

using UnityEngine;
using System.Collections;

public class MeshImage : MonoBehaviour {

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

	// 创建一个矩形
	void MeshRectangle()
	{
		// 得到网格渲染器对象
		MeshFilter mFilter = gameObject.GetComponent ();
		MeshRenderer mRen = gameObject.GetComponent ();

		//矩形的四个顶点坐标
		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 ();
	}
}

通过对以上代码的扩展,运行后的效果如下:

Unity 通过Mesh网格渲染绘制图形与字体_第1张图片


注意:所使用的Shader需要支持顶点色,如NGUI中的Unlit - Text



你可能感兴趣的:(Unity应用)