下面是绘制一个圆柱体的代码,只需要挂载在空对象上就行了:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
public class DrawHuan : MonoBehaviour
{
//分成的份数
[SerializeField] int n = 36;
//外圆半径
[SerializeField] int maxr = 5;
//内圆半径
[SerializeField] int minr = 3;
// Start is called before the first frame update
void Start()
{
Mesh mesh = GetComponent<MeshFilter>().mesh;
MeshRenderer meshRenderer = GetComponent<MeshRenderer>();
meshRenderer.material = new Material(Shader.Find("Standard"));
//点的集合
List<Vector3> point = new List<Vector3>();
//下标集合
List<int> triangles = new List<int>();
//每个角度对应的弧度
float r = 2 * Mathf.PI / n;
//上圆外侧的点个数
var count = 0;
//上圆环的点个数
var scount = 0;
//下圆环的点个数
var xcount = 0;
//上圆外侧的点
for (int i = 0; i < n; i++)
{
float x = Mathf.Cos(i * r) * maxr;
float z = Mathf.Sin(i * r) * maxr;
point.Add(new Vector3(x, 2, z));
}
count = point.Count;
//上圆内侧的点
for (int i = 0; i < n; i++)
{
float m = Mathf.Cos(i * r) * minr;
float w = Mathf.Sin(i * r) * minr;
point.Add(new Vector3(m, 2, w));
}
//上圆环绘制
for (int i = 0; i < n; i++)
{
triangles.Add(i + count);
triangles.Add(i + 1);
triangles.Add(i);
triangles.Add(i);
triangles.Add(i + count - 1);
triangles.Add(i + count);
}
scount = point.Count;
//下圆外侧的点
for (int i = 0; i < n; i++)
{
float x = Mathf.Cos(i * r) * maxr;
float z = Mathf.Sin(i * r) * maxr;
point.Add(new Vector3(x, -4, z));
}
xcount = point.Count;
//下圆内侧的点
for (int i = 0; i < n; i++)
{
float m = Mathf.Cos(i * r) * minr;
float w = Mathf.Sin(i * r) * minr;
point.Add(new Vector3(m, -4, w));
}
//下圆环绘制
for (int i = 0; i < n; i++)
{
triangles.Add(i + xcount);
triangles.Add(i + scount);
triangles.Add(i + scount + 1);
triangles.Add(i + scount);
triangles.Add(i + xcount);
triangles.Add(i + xcount - 1);
}
//外侧墙壁绘制
for (int i = 0; i < n; i++)
{
if (i == n - 1)
{
triangles.Add(i + scount);
triangles.Add(i);
triangles.Add(0);
triangles.Add(i + scount);
triangles.Add(0);
triangles.Add(scount);
}
else
{
triangles.Add(i + scount);
triangles.Add(i);
triangles.Add(i + 1);
triangles.Add(i + scount);
triangles.Add(i + 1);
triangles.Add(i + scount + 1);
}
}
//内侧墙壁绘制
for (int i = 0; i < n; i++)
{
if (i == n - 1)
{
triangles.Add(i + xcount);
triangles.Add(count);
triangles.Add(i + count);
triangles.Add(i + xcount);
triangles.Add(xcount);
triangles.Add(count);
}
else
{
triangles.Add(i + xcount);
triangles.Add(i + count + 1);
triangles.Add(i + count);
triangles.Add(i + xcount);
triangles.Add(i + xcount + 1);
triangles.Add(i + count + 1);
}
}
//添加法线
mesh.RecalculateNormals();
mesh.vertices = point.ToArray();
mesh.triangles = triangles.ToArray();
}
// Update is called once per frame
void Update()
{
}
}
如果对您有帮助的话,点个小赞赞哦!