- Home /
 
               Question by 
               Joshaba · Aug 24, 2018 at 02:34 PM · 
                meshmeshesmesh manipulation  
              
 
              Code Generated Plane Mesh
So I have the code that is almost entirely from the unity wiki page on how to generate meshes. However the plane mesh always is a square, even when different values are placed into scales for X & Y. I don't want to change the meshes transform scale as this will affect the density and other items tied in with this mesh I want to use. Any Ideas on how to get this to properly scale in the x & y direction instead of always producing a square?
 using System.Collections;
 using System.Collections.Generic;
 using JetBrains.Annotations;
 using UnityEngine;
 
 public class MeshGenerator : MonoBehaviour
 {
     public int xDensity = 1;
     public int yDensity = 1;
     public float ylength = 1f; //1 unity unit == 10f
     public float xwidth = 1f; //1 unity unit == 10f
 
     
     // Use this for initialization
     void Start () {
         
 // You can change that line to provide another MeshFilter
         MeshFilter filter = gameObject.AddComponent< MeshFilter >();
         Mesh mesh = filter.mesh;
         mesh.Clear();
  
         float length = ylength;
         float width = xwidth;
         int resX = xDensity; // 2 minimum
         int resZ = yDensity;
  
         #region Vertices        
         Vector3[] vertices = new Vector3[ resX * resZ ];
         for(int z = 0; z < resZ; z++)
         {
             // [ -length / 2, length / 2 ]
             float zPos = ((float)z / (resZ - 1) - .5f) * length;
             for(int x = 0; x < resX; x++)
             {
                 // [ -width / 2, width / 2 ]
                 float xPos = ((float)x / (resX - 1) - .5f) * width;
                 vertices[ x + z * resX ] = new Vector3( xPos, 0f, zPos );
             }
         }
         #endregion
  
         #region Normales
         Vector3[] normales = new Vector3[ vertices.Length ];
         for( int n = 0; n < normales.Length; n++ )
             normales[n] = Vector3.up;
         #endregion
  
         #region UVs        
         Vector2[] uvs = new Vector2[ vertices.Length ];
         for(int v = 0; v < resZ; v++)
         {
             for(int u = 0; u < resX; u++)
             {
                 uvs[ u + v * resX ] = new Vector2( (float)u / (resX - 1), (float)v / (resZ - 1) );
             }
         }
         #endregion
  
         #region Triangles
         int nbFaces = (resX - 1) * (resZ - 1);
         int[] triangles = new int[ nbFaces * 6 ];
         int t = 0;
         for(int face = 0; face < nbFaces; face++ )
         {
             // Retrieve lower left corner from face ind
             int i = face % (resX - 1) + (face / (resZ - 1) * resX);
  
             triangles[t++] = i + resX;
             triangles[t++] = i + 1;
             triangles[t++] = i;
  
             triangles[t++] = i + resX;    
             triangles[t++] = i + resX + 1;
             triangles[t++] = i + 1; 
         }
         #endregion
  
         mesh.vertices = vertices;
         mesh.normals = normales;
         mesh.uv = uvs;
         mesh.triangles = triangles;
  
         mesh.RecalculateBounds();
         mesh.RecalculateTangents();
         mesh.RecalculateNormals();
         transform.gameObject.AddComponent<BoxCollider>();
     }
     
 
 }
 
               Comment
              
 
               
              Your answer
 
 
             Follow this Question
Related Questions
DrawMesh slowing FPS 0 Answers
How to add vertex points to a mesh 1 Answer
Does mesh compression increase performance ? 1 Answer
Dynamically creating a mesh with a hole in it from two lists of vertices 0 Answers
Materials on an imported mesh 1 Answer
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                