之前的電流效果線段,是一段線段一張Mesh物件,少量使用下還好,不過如果在製作平面Mesh上使用這樣的方法會產生大量的Mesh物件,不是很好,產生大量物件也不是說很有效率。
因此這次換個方式來建立網格,把平面網格的各個點座標計算完後,使用這些座標產生網格建立一個物件,同時把各個座標點數值存下來,方便之後使用編輯。
製作完網格後同時把要配置的Material配置好,這樣動態製作一張平面網格就完成了,之後可以視情況來調整修改Mesh個座標點的數值或是做其他不同的調整,不過事實上也是可以用內建的Plane然後去抓其中的Mesh資料來修改,端看自己的需求了。
--
製作平面網格Code
public class CreatePlane: MonoBehaviour { public int lengthY = 50; //網格的長 public int lengthX = 50; //寬 public Material mat; //貼圖材質 public Vector3[] matrix; //把網格中各點的座標存下來 public Mesh mesh; //把建立的Mesh留下參照 public float levelYPosition = 0; //網格的Y軸位置 void Start () { Create(); } void Create() { //建立網格點座標陣列 matrix = new Vector3[lengthX * lengthY]; for (int y = 0; y < lengthY; ++y) { for(int x = 0; x < lengthX; ++x) { matrix[y * lengthX + x] = new Vector3(((float)x)/10, levelYPosition, ((float)y)/10); } } //建立[vert][Normals][UVs] Vector3[] vertices = new Vector3[lengthX * lengthY]; Vector3[] norms = new Vector3[lengthX * lengthY]; Vector2[] UVs = new Vector2[lengthX * lengthY]; for(int y = 0; y < lengthY; ++y) { for(int x = 0; x < lengthX; ++x) { vertices[y * lengthX + x] = matrix[y * lengthX + x]; norms[y * lengthX + x] = Vector3.up; UVs[y * lengthX + x] = new Vector2((1/(float)(lengthX-1))*x , (1/(float)(lengthY-1))*y); } } //建立[Triangle] int[] triangles = new int[(lengthX-1) * (lengthY-1) * 6]; int ind = 0; for(int y = 0; y < lengthY-1; ++y) { for(int x = 0; x < lengthX-1; ++x) { triangles[ind++] = y * lengthX + x; triangles[ind++] = (y + 1) * lengthX + (x + 1); triangles[ind++] = y * lengthX + (x + 1); triangles[ind++] = y * lengthX + x; triangles[ind++] = (y + 1) * lengthX + x; triangles[ind++] = (y + 1) * lengthX + (x + 1); } } //建立新的MeshRenderer並設定好材質 GameObject newMesh = new GameObject (); MeshRenderer mr = newMesh.AddComponent(typeof(MeshRenderer)) as MeshRenderer; mr.material = mat; MeshFilter mf = newMesh.AddComponent (typeof(MeshFilter)) as MeshFilter; mesh = new Mesh(); mesh.vertices = vertices; mesh.normals = norms; mesh.triangles = triangles; mesh.uv = UVs; mf.mesh = mesh; //把這個Mesh掛在當前物件底下 newMesh.transform.parent = this.transform; } }
No comments:
Post a Comment