unity使用mesh 画图(1)
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), // P0
new Vector3(center.x + halfSize, center.y - halfSize, center.z - halfSize), // P1
new Vector3(center.x + halfSize, center.y + halfSize, center.z - halfSize), // P2
new Vector3(center.x - halfSize, center.y + halfSize, center.z - halfSize), // P3
new Vector3(center.x - halfSize, center.y - halfSize, center.z + halfSize), // P4
new Vector3(center.x + halfSize, center.y - halfSize, center.z + halfSize), // P5
new Vector3(center.x + halfSize, center.y + halfSize, center.z + halfSize), // P6
new 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,4
public 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;
}
}