上次球都画了,这次画个平面,平面来说要比球简单一些:
uv也给出了,因为都是2D的,所以UV也比较简单
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
[RequireComponent(typeof(MeshFilter),typeof(MeshRenderer))]
public class MeshPlan : MonoBehaviour
{
[Header("XY轴顶点数量")]
public int numbers;
[Header("顶点密集程度")]
public float verDistance;
[HideInInspector]
public Vector3[] Heightvertice;
[HideInInspector]
public Vector3[] vertices;
private float nowWaveWidth;
private Vector3 TouchPoint;
void Update()
{
VerticesEdit();
StartCoroutine(EditPlane());
}
void VerticesEdit()
{
Vector3 center = transform.TransformPoint(this.transform.position);
vertices = new Vector3[numbers * numbers];
for (int u = 0; u < numbers; u++)
{//U代表高度层数
//I代表每一层当前到哪了
vertices[u * numbers] = new Vector3(center.x, center.y, center.z + u * verDistance);
for (int i = 1; i < numbers; i++)
{
vertices[u * numbers + i] = new Vector3(vertices[u * numbers].x + i * verDistance, center.y, vertices[u * numbers].z);
}
}
}
IEnumerator EditPlane()
{
Heightvertice = new Vector3[numbers];
for(int i=0;i<numbers;i++)
{
Heightvertice[i] = vertices[i * numbers];
}
int[] triangles = new int[(numbers - 1) * (numbers - 1) * 6];
int use = (numbers - 1) * 6;
for (int u = 0; u < numbers-1; u++)
{
for (int i = 0, n = (u + 1) * numbers, z = u * numbers; i < use; n++, z++, i += 6)
{
triangles[u * use + i] = z + 1;
triangles[u * use + i + 1] = z;
triangles[u * use + i + 2] = n;
triangles[u * use + i + 3] = n;
triangles[u * use + i + 4] = n + 1;
triangles[u * use + i + 5] = z + 1;
}
}
float size = numbers * verDistance;
Vector3[] normal = new Vector3[vertices.Length];
Vector2[] uv = new Vector2[vertices.Length];
for (int u = 0; u < numbers; u++)
{
uv[u * numbers] = new Vector2(0, (float)u / numbers);
normal[u * numbers] = Vector3.up;
for (int i = 1; i < numbers; i++)
{
uv[u * numbers + i] = new Vector2((float)i / numbers, uv[u * numbers].y);
normal[u * numbers + i] = Vector3.up;
}
}
Mesh Plane = new Mesh();
Plane.vertices = vertices;
Plane.triangles = triangles;
Plane.uv = uv;
Plane.normals = normal;
Plane.name = "平面";
this.GetComponent<MeshFilter>().mesh = Plane;
yield return 0;
}
}
这个就简单多了,实现效果也比较好
这是顶点密度达到100*100后的效果。