unity通过代码生成圆柱体mesh且上下两端为半球体的mesh
时间: 2023-05-20 07:06:27 浏览: 147
可以通过以下代码生成圆柱体mesh且上下两端为半球体的mesh:
```csharp
using UnityEngine;
public class CylinderGenerator : MonoBehaviour
{
public int segments = 32;
public float radius = 1f;
public float height = 2f;
private MeshFilter meshFilter;
private Mesh mesh;
private void Awake()
{
meshFilter = GetComponent<MeshFilter>();
mesh = new Mesh();
meshFilter.mesh = mesh;
GenerateCylinder();
}
private void GenerateCylinder()
{
int vertexCount = (segments + 1) * 2 + segments * 2;
int triangleCount = segments * 6 + segments * 6;
Vector3[] vertices = new Vector3[vertexCount];
Vector3[] normals = new Vector3[vertexCount];
Vector2[] uv = new Vector2[vertexCount];
int[] triangles = new int[triangleCount];
int vertexIndex = 0;
int triangleIndex = 0;
// Generate top cap
for (int i = 0; i <= segments; i++)
{
float angle = i * Mathf.PI * 2f / segments;
float x = Mathf.Cos(angle) * radius;
float z = Mathf.Sin(angle) * radius;
float y = height / 2f;
vertices[vertexIndex] = new Vector3(x, y, z);
normals[vertexIndex] = Vector3.up;
uv[vertexIndex] = new Vector2((float)i / segments, 1f);
vertexIndex++;
}
// Generate bottom cap
for (int i = 0; i <= segments; i++)
{
float angle = i * Mathf.PI * 2f / segments;
float x = Mathf.Cos(angle) * radius;
float z = Mathf.Sin(angle) * radius;
float y = -height / 2f;
vertices[vertexIndex] = new Vector3(x, y, z);
normals[vertexIndex] = Vector3.down;
uv[vertexIndex] = new Vector2((float)i / segments, 0f);
vertexIndex++;
}
// Generate cylinder body
for (int i = 0; i <= segments; i++)
{
float angle = i * Mathf.PI * 2f / segments;
float x = Mathf.Cos(angle) * radius;
float z = Mathf.Sin(angle) * radius;
vertices[vertexIndex] = new Vector3(x, height / 2f, z);
normals[vertexIndex] = new Vector3(x, 0f, z).normalized;
uv[vertexIndex] = new Vector2((float)i / segments, 0.5f);
vertexIndex++;
vertices[vertexIndex] = new Vector3(x, -height / 2f, z);
normals[vertexIndex] = new Vector3(x, 0f, z).normalized;
uv[vertexIndex] = new Vector2((float)i / segments, 0.5f);
vertexIndex++;
if (i < segments)
{
triangles[triangleIndex] = i * 2;
triangles[triangleIndex + 1] = i * 2 + 1;
triangles[triangleIndex + 2] = i * 2 + 2;
triangles[triangleIndex + 3] = i * 2 + 1;
triangles[triangleIndex + 4] = i * 2 + 3;
triangles[triangleIndex + 5] = i * 2 + 2;
triangleIndex += 6;
}
}
mesh.vertices = vertices;
mesh.normals = normals;
mesh.uv = uv;
mesh.triangles = triangles;
}
}
```
这段代码会在 Unity 中生成一个圆柱体 mesh,上下两端为半球体。可以通过调整 segments、radius 和 height 参数来控制圆柱体的细节。