未完无休止待续。。。。
using UnityEngine;
public class MeshDraw
{
private static Vector3[] vertices;
private static int[] rectangle = new int[6] { 0, 3, 1, 0, 2, 3 };
private static Vector2[] rectangleUvs = new Vector2[4] { new Vector2(1, 1), new Vector2(0, 1), new Vector2(1, 0), new Vector2(0, 0)};
public static Mesh DrawRect(Vector3 center, float width, float height)
{
var widthHelf = width * 0.5f;
var heightHelf = height * 0.5f;
vertices = new Vector3[4]{
new Vector3( widthHelf + center.x, center.y, heightHelf + center.z),
new Vector3(-widthHelf + center.x, center.y, heightHelf + center.z),
new Vector3( widthHelf + center.x, center.y, -heightHelf + center.z),
new Vector3(-widthHelf + center.x, center.y, -heightHelf + center.z)
};
return GetMesh(vertices, rectangle, rectangleUvs);
}
private static int circleVerticesCount;
private static float circleAngleDegre = 360f;
private static float circleAngleRad;
public static Mesh DrawCircle(Vector3 center, float Radius, int Segments)
{
circleVerticesCount = Segments + 1;
vertices = new Vector3[circleVerticesCount];
vertices[0] = center;
circleAngleRad = Mathf.Deg2Rad * circleAngleDegre;
float angledelta = circleAngleRad / Segments;
for (int i = 1; i < circleVerticesCount; i++)
{
float cosA = Mathf.Cos(circleAngleRad);
float sinA = Mathf.Sin(circleAngleRad);
vertices[i] = new Vector3(center.x+Radius * cosA, center.y, center.z+Radius * sinA);
circleAngleRad -= angledelta;
}
int triangle_count = Segments * 3;
int[] triangles = new int[triangle_count];
for (int i = 0, vi = 1; i <= triangle_count - 1; i += 3, vi++)
{
triangles[i] = 0;
triangles[i + 1] = vi;
triangles[i + 2] = vi + 1;
}
triangles[triangle_count - 3] = 0;
triangles[triangle_count - 2] = circleVerticesCount - 1;
triangles[triangle_count - 1] = 1;
Vector2[] uvs = new Vector2[circleVerticesCount];
for (int i = 0; i < circleVerticesCount; i++)
{
uvs[i] = new Vector2(vertices[i].x / Radius * 0.5f + 0.5f, vertices[i].z / Radius * 0.5f + 0.5f);
}
return GetMesh(vertices,triangles,uvs);
}
private static Mesh GetMesh(Vector3[] vertices, int[] triangles, Vector2[]uv)
{
Mesh mesh = new Mesh();
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.uv = uv;
return mesh;
}
}