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); }
void Awake() { //创建正多边形管道 List <Vector3> listCenter = GetPolygonCenters(); GameObject cube = RegularPolygonCube.CreateRegularPolygonCube(listCenter, 0.5f, 10); //使物体可以被拖动 if (null != cube) { cube.AddComponent <DragGameObject>(); } }