- Home /
How do I apply different textures onto a procedural mesh from a single image tilesheet?
I have the following code to produce a flat mesh based on the width and height specified in the Editor:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FloorMesh : MonoBehaviour {
public int width = 20;
public int height = 20;
public Texture2D texture;
List<Vector3> meshVerts = new List<Vector3>();
List<int> meshTris = new List<int>();
List<Vector2> meshUVs = new List<Vector2>();
Mesh mesh;
int squareCount = 0;
void Start() {
mesh = GetComponent<MeshFilter>().mesh;
Build();
}
void Build() {
for(int x = 0; x < width; x++) {
for(int y = 0; y < height; y++) {
GenSquare(x,y);
}
}
mesh.Clear();
mesh.vertices = meshVerts.ToArray();
mesh.triangles = meshTris.ToArray();
mesh.uv = meshUVs.ToArray();
mesh.RecalculateNormals();
meshVerts.Clear();
meshTris.Clear();
meshUVs.Clear();
squareCount = 0;
}
void GenSquare(int x,int y) {
meshVerts.Add(new Vector3(x,0,y));
meshVerts.Add(new Vector3(x + 1.0f,0,y));
meshVerts.Add(new Vector3(x + 1.0f,0,y - 1.0f));
meshVerts.Add(new Vector3(x,0,y - 1.0f));
meshTris.Add(squareCount * 4);
meshTris.Add((squareCount * 4) + 1);
meshTris.Add((squareCount * 4) + 3);
meshTris.Add((squareCount * 4) + 1);
meshTris.Add((squareCount * 4) + 2);
meshTris.Add((squareCount * 4) + 3);
/*
meshUVs.Add();
meshUVs.Add();
meshUVs.Add();
meshUVs.Add();
*/
squareCount++;
}
}
I also have an image of different floor tiles. I want to be able to pass a tile texture in the GenSquare() function so I can specify what part of the tilesheet image to use for that specific tile. How would I go about implementing this? My limit of understanding seems to be that I know I have to put something in the meshUVs.add section commented out in the code, but I am unsure how to get the tilesheet to select a specific area of the image to use as a floor tile, and then how to correctly apply this to that specific square on the mesh. Any help is greatly appreciated.
Your answer
![](https://koobas.hobune.stream/wayback/20220612175557im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Fix split shared UVs on mesh 0 Answers
How to texture huge tile grids? 1 Answer
How to make sure two meshes have the same vertex count 0 Answers
Problem when creating UVs coordinates 1 Answer
Black lines between tile sprites 0 Answers