Advertisement
Guest User

Plane

a guest
Mar 13th, 2013
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.88 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
  4. public class Plane : MonoBehaviour
  5. {
  6.     public float xSize = 1;
  7.     public float zSize = 1;
  8.     public int xSegments = 2;
  9.     public int zSegments = 2;
  10.  
  11.     public void UpdateMesh()
  12.     {
  13.         var meshFilter = GetComponent<MeshFilter>();
  14.         var mesh = CreateMesh(meshFilter.sharedMesh);
  15.         meshFilter.sharedMesh = mesh;
  16.     }
  17.  
  18.     private Mesh CreateMesh(Mesh mesh = null)
  19.     {
  20.         if (mesh == null)
  21.         {
  22.             mesh = new Mesh();
  23.         }
  24.         else
  25.         {
  26.             mesh.Clear();
  27.         }
  28.  
  29.         float dx = xSize / xSegments;
  30.         float dy = zSize / zSegments;
  31.         float x0 = -xSize / 2;
  32.         float z0 = -zSize / 2;
  33.         int vertexCount = (xSegments + 1) * (zSegments + 1);
  34.  
  35.         var vertices = new Vector3[vertexCount];
  36.         var uvs = new Vector2[vertexCount];
  37.         var normals = new Vector3[vertexCount];
  38.         var triangles = new int[xSegments * zSegments * 2 * 3];
  39.  
  40.         int index = 0;
  41.         for (int iz = 0; iz < zSegments + 1; iz++)
  42.         {
  43.             for (int ix = 0; ix < xSegments + 1; ix++)
  44.             {
  45.                 vertices[index] = new Vector3(x0 + ix * dx, 0, z0 + iz * dy);
  46.                 uvs[index] = new Vector2(ix / (float)xSegments, iz / (float)zSegments);
  47.                 normals[index] = Vector3.up;
  48.                 index++;
  49.             }
  50.         }
  51.  
  52.         var quadIndex = 0;
  53.         for (int iz = 0; iz < zSegments; iz++)
  54.         {
  55.             for (int ix = 0; ix < xSegments; ix++)
  56.             {
  57.                 var firstVertexIndex = iz * (xSegments + 1) + ix;
  58.                 triangles[quadIndex + 0] = firstVertexIndex + 1;
  59.                 triangles[quadIndex + 1] = firstVertexIndex;
  60.                 triangles[quadIndex + 2] = firstVertexIndex + xSegments + 1;
  61.                 triangles[quadIndex + 3] = firstVertexIndex + xSegments + 2;
  62.                 triangles[quadIndex + 4] = firstVertexIndex + 1;
  63.                 triangles[quadIndex + 5] = firstVertexIndex + xSegments + 1;
  64.                 quadIndex += 6;
  65.             }
  66.         }
  67.  
  68.         mesh.vertices = vertices;
  69.         mesh.normals = normals;
  70.         mesh.uv = uvs;
  71.         mesh.triangles = triangles;
  72.  
  73.         return mesh;
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement