1、获得顶点的数据集合
protected override Vector3[] GetVertices()
{
var bottomPoints = new Vector3[_circularSideCount];
var topPoints = new Vector3[_circularSideCount];
for (var i = 0; i < _circularSideCount; i++)
{
var rad = i * 1.0f / _circularSideCount * Mathf.PI * 2;
var bottomCos = Mathf.Cos(rad) * _bottomRadius;
var bottomSin = Mathf.Sin(rad) * _bottomRadius;
var topCos = Mathf.Cos(rad) * _topRadius;
var topSin = Mathf.Sin(rad) * _topRadius;
bottomPoints[i] = new Vector3(bottomCos, -_height * 0.5f, bottomSin) - _vertexOffset;
topPoints[i] = new Vector3(topCos, _height * 0.5f, topSin) - _vertexOffset;
}
var curIndex = 0;
var arrayLen = (_circularSideCount + 1) * 2 + (_circularSideCount + 1) * 2;
var vertices = new Vector3[arrayLen];
//底面
vertices[curIndex++] = new Vector3(0, -_height * 0.5f, 0) - _vertexOffset;
for (var i = 0; i < _circularSideCount; i++)
{
vertices[curIndex++] = bottomPoints[i];
}
//顶面
vertices[curIndex++] = new Vector3(0, _height * 0.5f, 0) - _vertexOffset;
for (var i = 0; i < _circularSideCount; i++)
{
vertices[curIndex++] = topPoints[i];
}
//侧面
for (var i = 0; i < _circularSideCount; i++)
{
vertices[curIndex++] = bottomPoints[i];
vertices[curIndex++] = topPoints[i];
}
vertices[curIndex++] = bottomPoints[0];
vertices[curIndex] = topPoints[0];
return vertices;
}
2、获得法线方向的数据集合
protected override Vector3[] GetNormals()
{
var curIndex = 0;
var arrayLen = (_circularSideCount + 1) * 2 + (_circularSideCount + 1) * 2;
var normals = new Vector3[arrayLen];
//底面
for (var i = 0; i <= _circularSideCount; i++)
{
normals[curIndex++] = Vector3.down;
}
//顶面
for (var i = 0; i <= _circularSideCount; i++)
{
normals[curIndex++] = Vector3.up;
}
//侧面
for (var i = 0; i <= _circularSideCount; i++)
{
var rad = i * 1.0f / _circularSideCount * Mathf.PI * 2;
var cos = Mathf.Cos(rad);
var sin = Mathf.Sin(rad);
normals[curIndex++] = new Vector3(cos, 0, sin);
normals[curIndex++] = new Vector3(cos, 0, sin);
}
return normals;
}
3、获得三角面顶点的索引
protected override int[] GetTriangles()
{
var curIndex = 0;
var arrayLen = _circularSideCount * 3 + _circularSideCount * 3 + _circularSideCount * 3 * 2;
var triangles = new int[arrayLen];
//底面
for (var i = 1; i < _circularSideCount; i++)
{
triangles[curIndex++] = 0;
triangles[curIndex++] = i;
triangles[curIndex++] = i + 1;
}
triangles[curIndex++] = 0;
triangles[curIndex++] = _circularSideCount;
triangles[curIndex++] = 1;
//顶面
for (var i = _circularSideCount + 2; i < _circularSideCount * 2 + 1; i++)
{
triangles[curIndex++] = i;
triangles[curIndex++] = _circularSideCount + 1;
triangles[curIndex++] = i + 1;
}
triangles[curIndex++] = _circularSideCount * 2 + 1;
triangles[curIndex++] = _circularSideCount + 1;
triangles[curIndex++] = _circularSideCount + 2;
//侧面
var startIndex = _circularSideCount * 2 + 2;
for (var i = 0; i < _circularSideCount; i++)
{
var index = i * 2;
triangles[curIndex++] = startIndex + index;
triangles[curIndex++] = startIndex + index + 1;
triangles[curIndex++] = startIndex + index + 3;
triangles[curIndex++] = startIndex + index + 3;
triangles[curIndex++] = startIndex + index + 2;
triangles[curIndex++] = startIndex + index;
}
return triangles;
}
4、获得UV坐标的数据集合
protected override Vector2[] GetUVs()
{
var curIndex = 0;
var arrayLen = (_circularSideCount + 1) * 2 + (_circularSideCount + 1) * 2;
var uvs = new Vector2[arrayLen];
//底面
uvs[curIndex++] = new Vector2(0.5f, 0.5f);//圆心
for (var i = 0; i < _circularSideCount; i++)
{
var rad = i * 1.0f / _circularSideCount * Mathf.PI * 2;
var cos = Mathf.Cos(rad);
var sin = Mathf.Sin(rad);
uvs[curIndex++] = new Vector2(cos, sin) * 0.5f + new Vector2(0.5f, 0.5f);
}
//顶面
uvs[curIndex++] = new Vector2(0.5f, 0.5f);
for (var i = 0; i < _circularSideCount; i++)
{
var rad = i * 1.0f / _circularSideCount * Mathf.PI * 2;
var cos = Mathf.Cos(rad);
var sin = Mathf.Sin(rad);
uvs[curIndex++] = new Vector2(cos, sin) * 0.5f + new Vector2(0.5f, 0.5f);
}
//侧面
var value = 1.0f / _circularSideCount;
for (var i = 0; i <= _circularSideCount; i++)
{
uvs[curIndex++] = new Vector2(value * i, 0);
uvs[curIndex++] = new Vector2(value * i, 1);
}
return uvs;
}
效果如下:
gitee地址:https://gitee.com/pangdudu010...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。