/// <summary> /// 図の更新 /// </summary> private void UpdateDiagram(List <Vector2> sites) { //ボロノイ図の作成 areaPolygon = ConvexPolygon.SquarePolygon(10f); voronoiGenerator = new VoronoiDiagramGenerator(); regions = voronoiGenerator.Execute(areaPolygon, sites); //線の削除 for (int i = 0; i < lines.Count; ++i) { lineFactory.DeleteLine(lines[i]); } lines.Clear(); for (int i = 0; i < regions.Count; ++i) { ConvexPolygon region = regions[i]; //線の描画 if (drawRegionLine) { List <Vector3> vertices = region.GetVertices3Copy(); vertices.Add(vertices[0]); lines.Add(lineFactory.CreateLine(vertices)); } //メッシュ meshes[i] = region.Scale(sites[i], 0.5f).ToMesh(); //AngleSubdivisionOperation.Execute(region, 170f).Scale(sites[i], 1f).ToMesh(); //あたり判定の設定 colliders[i].sharedMesh = meshes[i]; } }
private void Update() { List <Vector2> sites = new List <Vector2>(siteTranses.Select(elem => (Vector2)elem.position)); //ボロノイ図の作成 areaPolygon = ConvexPolygon.SquarePolygon(10f); voronoiGenerator = new VoronoiDiagramGenerator(); List <ConvexPolygon> regions = voronoiGenerator.Execute(areaPolygon, sites); List <Vector3> vertices; for (int i = 0; i < lines.Count; ++i) { lineFactory.DeleteLine(lines[i]); } //lines.Clear(); for (int i = 0; i < regions.Count; ++i) { ConvexPolygon region = regions[i]; if (drawRegionLine) { vertices = region.GetVertices3Copy(); vertices.Add(vertices[0]); lines.Add(lineFactory.CreateLine(vertices)); } //描画 Mesh mesh = null; if (angled) { mesh = AngleSubdivisionOperation.Execute(region, 170f).Scale(sites[i], 0.9f).ToAltMesh(); } else { mesh = LerpSubdivisionOperation.Execute(region, i, lerpT).Scale(sites[i], 0.9f).ToAltMesh(); } UnityEngine.Graphics.DrawMesh(mesh, Matrix4x4.identity, mat, 0); } }
private ConvexPolygon areaPolygon; //範囲用のポリゴン #region UnityEvent private void Start() { areaPolygon = ConvexPolygon.SquarePolygon(10f); //areaPolygon.DrawLine(new GameObject().AddComponent<LineRenderer>()); voronoiDiagram = new VoronoiDiagramGenerator(); List <Vector2> list = new List <Vector2>(sites.Select(elem => (Vector2)elem.position)); List <ConvexPolygon> regions = voronoiDiagram.Execute(areaPolygon, list); if (regions == null) { return; } foreach (var r in regions) { var obj = new GameObject("Region Line"); obj.transform.SetParent(transform); //r.DrawDebugLine(obj.AddComponent<LineRenderer>()); } }