Last active
March 26, 2018 18:56
-
-
Save dentedpixel/a04e9145add77bab71f5c066f3530749 to your computer and use it in GitHub Desktop.
A cube mesh created with code including uv mapping mesh and normals
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Collections; | |
using System.Collections.Generic; | |
using UnityEngine; | |
[RequireComponent(typeof(MeshFilter))] | |
[RequireComponent(typeof(MeshRenderer))] | |
[ExecuteInEditMode] // Added to be able to tweak the script without having to hit play ever time | |
public class ProceduralCube : MonoBehaviour | |
{ | |
// size of the cube sides | |
public float cubeSize = 0.2f; | |
// hardcoded values for a single cube | |
private static Vector3[] cubeVertices = new Vector3[]{ | |
// Front Side | |
new Vector3(0f, 0f, 0f), | |
new Vector3(1f, 0f, 0f), | |
new Vector3(0f, 1f, 0f), | |
new Vector3(1f, 1f, 0f), | |
// Right Side | |
new Vector3(1f, 0f, 0f), | |
new Vector3(1f, 0f, 1f), | |
new Vector3(1f, 1f, 0f), | |
new Vector3(1f, 1f, 1f), | |
// Back Side | |
new Vector3(1f, 0f, 1f), | |
new Vector3(0f, 0f, 1f), | |
new Vector3(1f, 1f, 1f), | |
new Vector3(0f, 1f, 1f), | |
// Left Side | |
new Vector3(0f, 1f, 0f), | |
new Vector3(0f, 1f, 1f), | |
new Vector3(0f, 0f, 0f), | |
new Vector3(0f, 0f, 1f), | |
// Top Side | |
new Vector3(0f, 1f, 0f), | |
new Vector3(1f, 1f, 0f), | |
new Vector3(0f, 1f, 1f), | |
new Vector3(1f, 1f, 1f), | |
// Bottom Side | |
new Vector3(1f, 0f, 0f), | |
new Vector3(0f, 0f, 0f), | |
new Vector3(1f, 0f, 1f), | |
new Vector3(0f, 0f, 1f), | |
}; | |
private static Vector3[] cubeNormals = new Vector3[]{ | |
// Front Side | |
new Vector3(0f, 0f, 1f), | |
new Vector3(0f, 0f, 1f), | |
new Vector3(0f, 0f, 1f), | |
new Vector3(0f, 0f, 1f), | |
// Right Side | |
new Vector3(0f, 1f, 0f), | |
new Vector3(0f, 1f, 0f), | |
new Vector3(0f, 0f, -1f), | |
new Vector3(0f, 0f, -1f), | |
// Back Side | |
new Vector3(0f, 1f, 0f), | |
new Vector3(0f, 1f, 0f), | |
new Vector3(0f, 0f, -1f), | |
new Vector3(0f, 0f, -1f), | |
// Left Side | |
new Vector3(0f, -1f, 0f), | |
new Vector3(0f, -1f, 0f), | |
new Vector3(0f, -1f, 0f), | |
new Vector3(0f, -1f, 0f), | |
// Top Side | |
new Vector3(-1f, 0f, 0f), | |
new Vector3(-1f, 0f, 0f), | |
new Vector3(-1f, 0f, 0f), | |
new Vector3(-1f, 0f, 0f), | |
// Bottom Side | |
new Vector3(1f, 0f, 0f), | |
new Vector3(1f, 0f, 0f), | |
new Vector3(1f, 0f, 0f), | |
new Vector3(1f, 0f, 0f), | |
}; | |
// Updating mesh ever frame just for convenience sake, in a game you would only want to update the mesh when you need it to change | |
void Update() | |
{ | |
MeshFilter mf = GetComponent<MeshFilter>(); | |
var mesh = new Mesh(); | |
mf.mesh = mesh; | |
int sides = 6; | |
Vector3[] vertices = new Vector3[sides * 4]; | |
Vector3[] normals = new Vector3[vertices.Length]; | |
Vector2[] uv = new Vector2[vertices.Length]; | |
int[] tri = new int[sides * 6]; | |
for (int i = 0; i < sides; i++) | |
{ | |
int i4 = i * 4; | |
// vertice layout | |
vertices[i4 + 0] = cubeVertices[i4 + 0] * cubeSize; | |
vertices[i4 + 1] = cubeVertices[i4 + 1] * cubeSize; | |
vertices[i4 + 2] = cubeVertices[i4 + 2] * cubeSize; | |
vertices[i4 + 3] = cubeVertices[i4 + 3] * cubeSize; | |
normals[i4 + 0] = cubeNormals[i4 + 0]; | |
normals[i4 + 1] = cubeNormals[i4 + 1]; | |
normals[i4 + 2] = cubeNormals[i4 + 2]; | |
normals[i4 + 3] = cubeNormals[i4 + 3]; | |
uv[i4 + 0] = new Vector2(0, 0); | |
uv[i4 + 1] = new Vector2(1, 0); | |
uv[i4 + 2] = new Vector2(0, 1); | |
uv[i4 + 3] = new Vector2(1, 1); | |
// assign triangles to the vertices | |
int i6 = i * 6; | |
tri[i6 + 0] = i4 + 0; | |
tri[i6 + 1] = i4 + 2; | |
tri[i6 + 2] = i4 + 1; | |
tri[i6 + 3] = i4 + 2; | |
tri[i6 + 4] = i4 + 3; | |
tri[i6 + 5] = i4 + 1; | |
} | |
mesh.vertices = vertices; | |
mesh.normals = normals; | |
mesh.uv = uv; | |
mesh.triangles = tri; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment