public MeshBuilder Create() { CircleMesh circleMesh = new CircleMesh(); circleMesh.radius = radius; circleMesh.direction1 = direction1; circleMesh.direction2 = direction2; circleMesh.totalVertices = totalPerimeterVertices; Vector3 direction3 = Vector3.Cross(direction1, direction2).normalized; MeshBuilder upCircle = circleMesh.Create() .Translate(0.5f * height * direction3); MeshBuilder downCircle = circleMesh.Create() .Translate(-0.5f * height * direction3); MeshUnion meshUnion = new MeshUnion(); meshUnion.size = height; meshUnion.totalSegments = totalVerticalSegments; MeshBuilder tunnel = meshUnion.Create(upCircle, downCircle); return(MeshBuilder.Join(upCircle, downCircle).Join(tunnel)); }
public MeshBuilder Create() { CircleMesh circleMesh = new CircleMesh(); circleMesh.radius = radius; circleMesh.direction1 = direction1; circleMesh.direction2 = direction2; circleMesh.totalVertices = totalPerimeterVertices; if ((direction3 - Vector3.up).magnitude < 0.001f) { direction3 = Vector3.Cross(direction1, direction2).normalized; } MeshBuilder baseCircle = circleMesh.Create() .Translate(-0.5f * height * direction3); MeshBuilder top = new MeshBuilder(); top.AddVertice(new Vector3(0f, -0.5f * height, 0f) + height * direction3, "border"); MeshUnion meshUnion = new MeshUnion(); meshUnion.size = height; meshUnion.totalSegments = totalVerticalSegments; MeshBuilder cone = meshUnion.Create(top, baseCircle); return(cone.Join(baseCircle)); }