- 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
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