using UnityEngine; using System.Collections; public class Quad : MonoBehaviour { // Use this for initialization void Start () { CreateQuad (); } private float m_width = 1; private float m_length = 1; public void CreateQuad() { /* 1. 頂點,三角形,法線,uv坐標, 絕對必要的部分只有頂點和三角形。 如果模型中不需要場景中的光照,那么就不需要法線。如果模型不需要貼材質,那么就不需要UV */ Vector3[] vertices = new Vector3[4]; Vector3[] normals = new Vector3[4]; Vector2[] uv = new Vector2[4]; vertices [0] = new Vector3 (0, 0, 0); uv [0] = new Vector2 (0, 0); normals [0] = Vector3.up; vertices [1] = new Vector3 (0, 0, m_length); uv [1] = new Vector2 (0, 1); normals [1] = Vector3.up; vertices [2] = new Vector3 (m_width, 0, m_length); uv [2] = new Vector2 (1, 1); normals [2] = Vector3.up; vertices [3] = new Vector3 (m_width, 0, 0); uv [3] = new Vector2 (1, 0); normals [3] = Vector3.up; /*2. 三角形,頂點索引: 三角形是由3個整數確定的,各個整數就是角的頂點的index。 各個三角形的頂點的順序通常由下往上數, 可以是順時針也可以是逆時針,這通常取決於我們從哪個方向看三角形。 通常,當mesh渲染時,"逆時針" 的面會被擋掉。 我們希望保證順時針的面與法線的主向一致 */ int[] indices = new int[6]; indices [0] = 0; indices [1] = 1; indices [2] = 2; indices [3] = 0; indices [4] = 2; indices [5] = 3; Mesh mesh = new Mesh (); mesh.vertices = vertices; mesh.normals = normals; mesh.uv = uv; mesh.triangles = indices; mesh.RecalculateBounds (); MeshFilter filter = this.gameObject.AddComponent<MeshFilter> (); if(filter != null) { filter.sharedMesh = mesh; } MeshRenderer meshRender = this.gameObject.AddComponent<MeshRenderer> (); Shader shader = Shader.Find ("Diffuse"); meshRender.sharedMaterial = new Material (shader); } }