Unity Mesh 绘制 半圆管

 基于 上一篇 绘制圆管 改编

[RequireComponent(typeof(MeshRenderer))]
//自动添加网格数据组件
[RequireComponent(typeof(MeshFilter))]
public class CylinderCut : MonoBehaviour
{
    Mesh mesh;
    VertexHelper vh;
    //内部半径
    float insideR = 3;
    //外部半径
    float outerR = 6;
    float height = 15;
    float num = 26;
    //弧度
    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;
       
        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 / 2)
            {
                if (i == 0 || i == num /2)
                {
                    if (i == 0)
                    {
                       
                        vh.AddTriangle(4, 5, 7);
                        vh.AddTriangle(4, 7, 6);
                    }
                    else
                    {
                        vh.AddTriangle(i * 4 + 2, i * 4 + 3, i * 4 + 1);
                        vh.AddTriangle(i * 4 + 2, i * 4 + 1, i*4);
                       
                    }
                }
                else
                {
                    //地  圆  顺时针   下可看
                    vh.AddTriangle(i * 4, i * 4 + 2, (i + 1) * 4 + 2);
                    vh.AddTriangle(i * 4, (i + 1) * 4 + 2, (i + 1) * 4);

                    // 高 圆 逆时针 上可看
                    vh.AddTriangle((i + 1) * 4 + 3, i * 4 + 3, i * 4 + 1);
                    vh.AddTriangle((i + 1) * 4 + 1, (i + 1) * 4 + 3, i * 4 + 1);

                    //内壁  逆时针 内看
                    vh.AddTriangle((i + 1) * 4 + 1, i * 4 + 1, i * 4);
                    vh.AddTriangle((i + 1) * 4, (i + 1) * 4 + 1, i * 4);

                    //外壁 顺时针 外看
                    vh.AddTriangle(i * 4 + 2, i * 4 + 3, (i + 1) * 4 + 3);
                    vh.AddTriangle(i * 4 + 2, (i + 1) * 4 + 3, (i + 1) * 4 + 2);
                }
            }


        }
        vh.FillMesh(mesh);
        Material mat = new Material(Shader.Find("Standard"));
        GetComponent<MeshRenderer>().material = mat;
        GetComponent<MeshFilter>().mesh = mesh;
       // GetComponent<MeshCollider>().sharedMesh = mesh;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值