Unity Mesh 网格 绘制 空心圆柱

//自动添加 网格渲染组件
[RequireComponent(typeof(MeshRenderer))]
//自动添加网格数据组件
[RequireComponent (typeof(MeshFilter))]
public class Cylinder : MonoBehaviour
{
    Mesh mesh;
    VertexHelper vh;
    //内部半径
    float insideR=3;
    //外部半径
    float outerR=6;
    float height = 15;
    float num = 25;
    //弧度
    float angel;
    // Start is called before the first frame update
    void Start()
    {
        //new 一个新的网格
        mesh=new Mesh();
        //new  一个新的顶点帮助器
        vh=new VertexHelper();
        //弧度
        angel = 2 * Mathf.PI / num;
        //添加圆心
        //底 圆心
        vh.AddVert(Vector3.zero,Color.white,new Vector2(0,0));
        //高圆心
        vh.AddVert(new Vector3(0, height, 0), Color.white, new Vector2(0, 0));
        for(int i=0;i<num;i++)
        {
            // 底 内圆
            float x = Mathf.Cos(angel * i) * insideR;
            float y = Mathf.Sin(angel * i) * insideR;
            vh.AddVert(new Vector3(x, -height/2, y), Color.white, new Vector2(0,0));
            vh.AddVert(new Vector3(x, height / 2, y), Color.white, new Vector2(0, 0));
            //底 外圆
            float x1 = Mathf.Cos(angel * i) * outerR;
            float y1 = Mathf.Sin(angel * i) * outerR;
            vh.AddVert(new Vector3(x1, -height / 2, y1), Color.white, new Vector2(0, 0));
            vh.AddVert(new Vector3(x1, height / 2, y1), Color.white, new Vector2(0, 0));
            if (i == num - 1)
            {

                //底 圆
                vh.AddTriangle(i * 4 + 2, (i + 1) * 4, 4);
                vh.AddTriangle(i * 4 + 2, 4, 2);

                //高 圆
                vh.AddTriangle(5, (i + 1) * 4 + 1, i * 4 + 2 + 1);
                vh.AddTriangle(3, 5, i * 4 + 3);
                //内壁

                vh.AddTriangle(3, (i + 1) * 4 - 1, (i + 1) * 4 - 2);
                vh.AddTriangle(2, 3, (i + 1) * 4 - 2);
                //外壁
                vh.AddTriangle((i + 1) * 4, (i + 1) * 4 + 1, 5);
                vh.AddTriangle((i + 1) * 4, 5, 4);

            }
            else
            {

                //底 圆
                vh.AddTriangle(i * 4 + 2, (i + 1) * 4, (i + 1) * 4 + 4);
                vh.AddTriangle(i * 4 + 2, (i + 1) * 4 + 4, (i + 1) * 4 + 2);

                //高 圆
                vh.AddTriangle((i + 1) * 4 + 5, (i + 1) * 4 + 1, i * 4 + 3);
                vh.AddTriangle((i + 1) * 4 + 3, (i + 1) * 4 + 5, i * 4 + 3);
                //内壁                 
                vh.AddTriangle((i + 2) * 4 - 1, (i + 1) * 4 - 1, (i + 1) * 4 - 2);
                vh.AddTriangle((i + 1) * 4 + 2, (i + 2) * 4 - 1, (i + 1) * 4 - 2);
                //外壁
                vh.AddTriangle((i + 1) * 4, (i + 1) * 4 + 1, (i + 2) * 4 + 1);
                vh.AddTriangle((i + 1) * 4, (i + 2) * 4 + 1, (i + 1) * 4 + 4);
            }
        }
        vh.FillMesh(mesh);
        Material mat = new Material(Shader.Find("Standard"));
        GetComponent<MeshRenderer>().material = mat;
        GetComponent<MeshFilter>().mesh = mesh;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值