- Home /
Help! Problems texturing generated mesh
Hello, I am relatively new to Unity but recently I followed a tutorial by a guy called Brackeys on Youtube. In the tutorial, he taught me how to creating procedurally generating terrain via making a mesh. I was able to get it all to work and even was able to attach a collider to the mesh and have it properly function. However, when I tried to texture the mesh all that would happen is that the mesh would just be the base colour of the texture, and not have the texture itself (so green for grass). I asked my friend who has been programming with unity for about 6 years now and he gave a few possible solutions but nothing worked. Since then I have spent the past three hours trying to figure out a solution from online articles but either it doesn't work or it is explained in such a complicated way that neither I nor my friend can figure it out.
Here is the link to the Brackeys video if you want more information: https://www.youtube.com/watch?v=64NblGkAabk
Also for some reason it's not recognising the first few lines of my code as code but you guys should get it
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(MeshFilter))]
public class ProceduralMeshGenerator : MonoBehaviour
{
Mesh mesh;
Vector3[] vertices;
int[] triangles;
public int xSize = 20;
public int ySize = 10;
public int zSize = 20;
void Start()
{
mesh = new Mesh();
GetComponent<MeshFilter>().mesh = mesh;
CreateShape();
UpdateMesh();
GetComponent<MeshCollider>().sharedMesh = mesh;
}
void CreateShape()
{
vertices = new Vector3[(xSize+1)*(zSize+1)];
for (int i=0, z = 0; z <= zSize; z++)
{
for (int x = 0; x <= xSize; x++)
{
float y = Mathf.PerlinNoise(x * .3f, z * .3f) * ySize;
vertices[i] = new Vector3(x, y, z);
i++;
}
}
int vert = 0;
int tris = 0;
triangles = new int[xSize*zSize*6];
for (int z = 0; z < zSize; z++)
{
for (int x = 0; x < xSize; x++)
{
triangles[tris + 0] = vert + 0;
triangles[tris + 1] = vert + xSize + 1;
triangles[tris + 2] = vert + 1;
triangles[tris + 3] = vert + 1;
triangles[tris + 4] = vert + xSize + 1;
triangles[tris + 5] = vert + xSize + 2;
vert++;
tris += 6;
}
vert++;
}
mesh.uv = uvs;
}
void UpdateMesh()
{
mesh.Clear();
mesh.vertices=vertices;
mesh.triangles=triangles;
mesh.RecalculateNormals();
}
}