plane 圆 空心椭圆 椭圆
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class DrawMeshManager
{static DrawMeshManager instance;public static DrawMeshManager Instance {get {if (instance != null){return instance;}else{instance = new DrawMeshManager();return instance;}}}
//面片public void DrawMesh(){Mesh mesh = new Mesh();Vector3[] vertices = new Vector3[]{new Vector3(0, 0, 0),new Vector3(0, 0, 10),new Vector3(10, 0, 10),new Vector3(10, 0, 0),};mesh.vertices = vertices;int[] triangles = new int[]{0, 1, 2,0, 2, 3};mesh.triangles = triangles;Vector3[] normals = new Vector3[]{Vector3.up,Vector3.up,Vector3.up, Vector3.up};mesh.normals = normals;Vector2[] uvs = new Vector2[]{new Vector2(0, 0),new Vector2(1, 0),new Vector2(1, 1),new Vector2(0, 1)};mesh.uv = uvs;GameObject obj = new GameObject("MeshObject");MeshFilter meshFilter = obj.AddComponent<MeshFilter>();meshFilter.mesh = mesh;MeshRenderer renderer = obj.AddComponent<MeshRenderer>();Material material = new Material(Shader.Find("Standard"));material.shader = Shader.Find("Sprites/Default");material.SetColor("_Color", Color.red);renderer.material = material;}
//五角星public void Drawfivestar(){Mesh mesh = new Mesh();const int num = 5;float rad = 0;const float r1 = 5, r2 = 2;rad = 2 * Mathf.PI / num;Vector3[] vertices = new Vector3[num * 2 + 1];vertices[0] = Vector3.zero;for (int i = 1; i <= num; i++){float angle = i * rad;float x = Mathf.Cos(angle) * r1;float y = Mathf.Sin(angle) * r1;Vector3 v1 = new Vector3(x, y, 0);vertices[i * 2 - 1] = v1;float x1 = Mathf.Cos(angle + (rad / 2)) * r2;float y1 = Mathf.Sin(angle + (rad / 2)) * r2;Vector3 v2 = new Vector3(x1, y1, 0);vertices[i * 2] = v2;}mesh.vertices = vertices;int[] triangles = new int[num * 6];for (int i = 0; i < 10; i++){if (i != 9){triangles[i * 3] = 0;triangles[i * 3 + 1] = i + 1;triangles[i * 3 + 2] = i + 2;}else{triangles[i * 3] = 0;triangles[i * 3 + 1] = 10;triangles[i * 3 + 2] = 1;}}mesh.triangles = triangles;mesh.RecalculateNormals();GameObject obj = new GameObject("MeshObject");MeshFilter meshFilter = obj.AddComponent<MeshFilter>();meshFilter.mesh = mesh;MeshRenderer renderer = obj.AddComponent<MeshRenderer>();Material material = new Material(Shader.Find("Standard"));material.shader = Shader.Find("Sprites/Default");material.SetColor("_Color", Color.red);renderer.material = material;}public void DrawBox(){Mesh mesh = new Mesh();const float boxHegih = 5, width = 3;Vector3 center = Vector3.zero;const float halfSize = 5;Vector3[] vertices = new Vector3[]{new Vector3(center.x - halfSize, center.y - halfSize, center.z - halfSize), // P0new Vector3(center.x + halfSize, center.y - halfSize, center.z - halfSize), // P1new Vector3(center.x + halfSize, center.y + halfSize, center.z - halfSize), // P2new Vector3(center.x - halfSize, center.y + halfSize, center.z - halfSize), // P3new Vector3(center.x - halfSize, center.y - halfSize, center.z + halfSize), // P4new Vector3(center.x + halfSize, center.y - halfSize, center.z + halfSize), // P5new Vector3(center.x + halfSize, center.y + halfSize, center.z + halfSize), // P6new Vector3(center.x - halfSize, center.y + halfSize, center.z + halfSize) // P7};mesh.vertices = vertices;int[] triangles = new int[]{0, 2, 1,0, 3, 2,1, 2, 6,1, 6, 5,3, 7, 2,7, 6, 2,0, 1, 5,0, 5, 4,3, 0, 4,4, 7, 3,5, 6, 7,7, 4, 5,};mesh.triangles = triangles;mesh.RecalculateNormals();GameObject obj = new GameObject("Cube");MeshFilter meshFilter = obj.AddComponent<MeshFilter>();meshFilter.mesh = mesh;MeshRenderer renderer = obj.AddComponent<MeshRenderer>();Material material = new Material(Shader.Find("Standard"));renderer.material = material;}
//圆public void DrawCircle(){Mesh mesh = new Mesh();const int num = 50;float singleAngle = 0;const float radius = 3;singleAngle = 2 * Mathf.PI / num;Vector3 center = Vector3.zero;Vector3[] vertices = new Vector3[num + 1];vertices[0] = center;for (int i = 1; i <= num; i++){float currentAngle = i * singleAngle;float x = radius * Mathf.Cos(currentAngle);float y = radius * Mathf.Sin(currentAngle);Vector3 point = new Vector3(x, y, 0);vertices[i] = point;}mesh.vertices = vertices;int[] triangles = new int[num * 3];for (int i = 0; i < num; i++){if (i != num - 1){triangles[i * 3] = 0;triangles[i * 3 + 1] = i + 1;triangles[i * 3 + 2] = i + 2;}else{triangles[i * 3] = 0;triangles[i * 3 + 1] = num;triangles[i * 3 + 2] = 1;}}mesh.triangles = triangles;GameObject obj = new GameObject("MeshObject");MeshFilter meshFilter = obj.AddComponent<MeshFilter>();meshFilter.mesh = mesh;MeshRenderer renderer = obj.AddComponent<MeshRenderer>();Material material = new Material(Shader.Find("Standard"));material.shader = Shader.Find("Sprites/Default");material.SetColor("_Color", Color.red);renderer.material = material;}
//椭圆public void DrawEllipse(){const float r1 = 3, r2 = 7;const int num = 100;float singleAngle = 2 * Mathf.PI / num;Mesh mesh = new Mesh();Vector3[] vertices = new Vector3[num + 1];vertices[0] = Vector3.zero;for (int i = 0; i <= num; i++){float x = Mathf.Sin(i * singleAngle) * r1;float y = Mathf.Cos(i * singleAngle) * r2;Vector3 point = new Vector3(x, y, 0);vertices[i] = point;}mesh.vertices = vertices;int[] triangles = new int[num * 3];for (int i = 0; i < num; i++){if (i != num - 1){triangles[i * 3] = 0;triangles[i * 3 + 1] = i + 1;triangles[i * 3 + 2] = i + 2;}else{triangles[i * 3] = 0;triangles[i * 3 + 1] = num;triangles[i * 3 + 2] = 1;}}mesh.triangles = triangles;mesh.triangles = triangles;GameObject obj = new GameObject("MeshObject");MeshFilter meshFilter = obj.AddComponent<MeshFilter>();meshFilter.mesh = mesh;MeshRenderer renderer = obj.AddComponent<MeshRenderer>();Material material = new Material(Shader.Find("Standard"));material.shader = Shader.Find("Sprites/Default");material.SetColor("_Color", Color.red);renderer.material = material;}//空心椭圆 使用内圈圆 的定点坐标 和外圈圆的定点坐标 画出空心椭圆 0,1,2, 1,3,2, 2,3,4 ,3,5,4public void HollowEllipse(){Mesh mesh = new Mesh();int num = 60;Vector3[] vertices = new Vector3[num * 2];float single = 2 * Mathf.PI / num;const float innerR1 = 2, innerR2 = 1;const float outR1 = 3, outR2 = 2;for (int i = 0; i < num; i++){float angle = i * single;float innerX = Mathf.Sin(angle) * innerR1;float innerY = Mathf.Cos(angle) * innerR2;vertices[i * 2] = new Vector3(innerX, innerY, 0);float outX = Mathf.Sin(angle) * outR1;float outY = Mathf.Cos(angle) * outR2;vertices[i * 2 + 1] = new Vector3(outX, outY, 0);}mesh.vertices = vertices;int[] triangles = new int[num * 2 * 3];for (int i = 0; i < num; i++){bool isTrue = i < num - 1;int v5 = isTrue ? 2 * i + 3 : 1;int v6 = isTrue ? 2 * i + 2 : 0;int index = i * 6;triangles[index] = i * 2;triangles[index + 1] = 2 * i + 1;triangles[index + 2] = v6;triangles[index + 3] = 2 * i + 1;triangles[index + 4] = v5;triangles[index + 5] = v6;}mesh.triangles = triangles;mesh.RecalculateNormals();GameObject obj = new GameObject("MeshObject");MeshFilter meshFilter = obj.AddComponent<MeshFilter>();meshFilter.mesh = mesh;MeshRenderer renderer = obj.AddComponent<MeshRenderer>();Material material = new Material(Shader.Find("Standard"));material.shader = Shader.Find("Sprites/Default");material.SetColor("_Color", Color.red);renderer.material = material;}}