Esempio n. 1
0
    public static GameObject CreateRegularPolygonCube(List <Vector3> listCenter, float raduis, int numberOfSide)
    {
        if (listCenter.Count <= 1)
        {
            Debug.Log("至少要有两个正多边形的中心");
            return(null);
        }
        if (raduis <= 0f)
        {
            Debug.Log("外接圆半径要大于0");
            return(null);
        }

        if (numberOfSide < 3)
        {
            Debug.Log("正多边形的边数不能小于3");
            return(null);
        }
        //创建游戏物体
        GameObject go = new GameObject();

        go.name = "RegularPolygonCube";
        RegularPolygonCube cube = go.AddComponent <RegularPolygonCube>();

        cube.meshFilter   = go.AddComponent <MeshFilter>();
        cube.meshRenderer = go.AddComponent <MeshRenderer>();
        //使用unity自带的shader创建材质
        Shader   shader = Shader.Find("Standard");
        Material mat    = new Material(shader);

        cube.meshRenderer.sharedMaterial = mat;
        //获取所有顶点
        List <Vector3> allVertexs = new List <Vector3>();

        //获取第一个正多边形的顶点
        List <Vector3> previousVertexs = null;
        List <Vector3> currentVertexs  = GetVertexsForRegularPolygon(Vector3.positiveInfinity, Vector3.positiveInfinity, listCenter[0], listCenter[1], raduis, numberOfSide);

        allVertexs.AddRange(currentVertexs);
        previousVertexs = currentVertexs;

        //获取中间的正多边形的顶点
        for (int i = 1; i < listCenter.Count - 1; i++)
        {
            currentVertexs = GetVertexsForRegularPolygon(listCenter[i - 1], previousVertexs[0], listCenter[i], listCenter[i + 1], raduis, numberOfSide);
            allVertexs.AddRange(currentVertexs);
            previousVertexs = currentVertexs;
        }

        //获取最后一个正多边形的顶点
        currentVertexs = GetVertexsForRegularPolygon(listCenter[listCenter.Count - 2], previousVertexs[0], listCenter[listCenter.Count - 1], Vector3.positiveInfinity, raduis, numberOfSide);
        allVertexs.AddRange(currentVertexs);

        //初始化网格,连接顶点
        cube.InitMesh(allVertexs, numberOfSide);
        //加网格碰撞体
        go.AddComponent <MeshCollider>();
        return(go);
    }
Esempio n. 2
0
    void Awake()
    {
        //创建正多边形管道
        List <Vector3> listCenter = GetPolygonCenters();
        GameObject     cube       = RegularPolygonCube.CreateRegularPolygonCube(listCenter, 0.5f, 10);

        //使物体可以被拖动
        if (null != cube)
        {
            cube.AddComponent <DragGameObject>();
        }
    }