https://catlikecoding.com/unity/tutorials/procedural-grid/
https://pan.baidu.com/s/1k5K-uQQmo65TSlKnU7et7Q
提取码:fz6g
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//自己画一个骰子
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class Cube : MonoBehaviour
{
private Vector3[] vertices;
private void Awake()
{
StartCoroutine(Generate());
}
private IEnumerator Generate()
{
WaitForSeconds wait = new WaitForSeconds(1f);
var mesh = GetComponent<MeshFilter>().mesh = new Mesh();
mesh.name = "Procedural Cube";
vertices = new Vector3[14];
Vector2[] uv = new Vector2[14];
int[] triangles = new int[6 * 6];
vertices[0] = new Vector3(0, 0, 0);
vertices[1] = new Vector3(0, 1, 0);
vertices[2] = new Vector3(1, 1, 0);
vertices[3] = new Vector3(1, 0, 0);
vertices[4] = new Vector3(0, 0, 1);
vertices[5] = new Vector3(0, 1, 1);
vertices[6] = new Vector3(1, 1, 1);
vertices[7] = new Vector3(1, 0, 1);
vertices[8] = new Vector3(0, 0, 0);
vertices[9] = new Vector3(0, 1, 0);
vertices[10] = new Vector3(0, 1, 0);
vertices[11] = new Vector3(0, 1, 1);
vertices[12] = new Vector3(0, 0, 1);
vertices[13] = new Vector3(0, 0, 0);
uv[0] = new Vector2(0, 1f/3f);
uv[1] = new Vector2(0, 2f / 3f);
uv[2] = new Vector2(1f/4f, 2f / 3f);
uv[3] = new Vector2(1f / 4f, 1f / 3f);
uv[6] = new Vector2(2f / 4f, 2f / 3f);
uv[7] = new Vector2(2f / 4f, 1f / 3f);
uv[5] = new Vector2(3f / 4f, 2f / 3f);
uv[4] = new Vector2(3f / 4f, 1f / 3f);
uv[9] = new Vector2(4f / 4f, 2f / 3f);
uv[8] = new Vector2(4f / 4f, 1f / 3f);
uv[11] = new Vector2(2f / 4f, 3f / 3f);
uv[10] = new Vector2(1f / 4f, 3f / 3f);
uv[12] = new Vector2(2f / 4f, 0);
uv[13] = new Vector2(1f / 4f, 0);
//1
triangles[0] = 0;
triangles[1] = 1;
triangles[2] = 2;
triangles[3] = 0;
triangles[4] = 2;
triangles[5] = 3;
//2
triangles[6] = 3;
triangles[7] = 2;
triangles[8] = 7;
triangles[9] = 7;
triangles[10] = 2;
triangles[11] = 6;
//3
triangles[12] = 7;
triangles[13] = 6;
triangles[14] = 5;
triangles[15] = 4;
triangles[16] = 7;
triangles[17] = 5;
//4
triangles[18] = 8;
triangles[19] = 4;
triangles[20] = 5;
triangles[21] = 8;
triangles[22] = 5;
triangles[23] = 9;
//5
triangles[24] = 2;
triangles[25] = 10;
triangles[26] = 6;
triangles[27] = 6;
triangles[28] = 10;
triangles[29] = 11;
//6
triangles[30] = 3;
triangles[31] = 7;
triangles[32] = 13;
triangles[33] = 13;
triangles[34] = 7;
triangles[35] = 12;
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.uv = uv;
mesh.RecalculateNormals();
yield return wait;
}
private void OnDrawGizmos()
{
if (vertices == null)
{
return;
}
Gizmos.color = Color.black;
for (int i = 0; i < vertices.Length; i++)
{
//Gizmos.DrawSphere(vertices[i], 0.1f);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//自己画一个面,并着色
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class Grid : MonoBehaviour
{
public int xSize, ySize;
private Vector3[] vertices;
private void Awake()
{
StartCoroutine(Generate());
}
private IEnumerator Generate()
{
WaitForSeconds wait = new WaitForSeconds(1f);
var mesh = GetComponent<MeshFilter>().mesh = new Mesh();
mesh.name = "Procedural Grid";
vertices = new Vector3[(xSize + 1) * (ySize + 1)];
Vector2[] uv = new Vector2[vertices.Length];
Vector4[] tangents = new Vector4[vertices.Length];
Vector4 tangent = new Vector4(1f, 0f, 0f, -1f);
for (int i = 0, y = 0; y <= ySize; y++)
{
for (int x = 0; x <= xSize; x++, i++)
{
vertices[i] = new Vector3(x, y);
uv[i] = new Vector2((float)x / xSize, (float)y / ySize);
tangents[i] = tangent;
}
}
mesh.vertices = vertices;
mesh.uv = uv;
mesh.tangents = tangents;
int[] triangles = new int[xSize * ySize * 6];
for (int ti = 0, vi = 0, y = 0; y < ySize; y++, vi++)
{
for (int x = 0; x < xSize; x++, ti += 6, vi++)
{
triangles[ti] = vi;
triangles[ti + 3] = triangles[ti + 2] = vi + 1;
triangles[ti + 4] = triangles[ti + 1] = vi + xSize + 1;
triangles[ti + 5] = vi + xSize + 2;
}
}
mesh.triangles = triangles;
mesh.RecalculateNormals();
yield return wait;
}
private void OnDrawGizmos()
{
if (vertices == null)
{
return;
}
Gizmos.color = Color.black;
for (int i = 0; i < vertices.Length; i++)
{
Gizmos.DrawSphere(vertices[i], 0.1f);
}
}
}
网友评论