/// <summary> /// 绘制连接处的三角 /// </summary> /// <param name="direction"></param> /// <param name="cell"></param> /// <param name="v1"></param> /// <param name="v2"></param> private void TriangulateConnection(HexDirection direction, HexCell cell, Vector3 v1, Vector3 v2) { HexCell neighbor = cell.GetNeighbor(direction); if (neighbor == null) { return; } Vector3 bridge = HexMertics.GetBridge(direction); Vector3 v3 = v1 + bridge; Vector3 v4 = v2 + bridge; AddQuad(v1, v2, v3, v4); AddQuadColor(cell.color, neighbor.color); HexCell nextNeighbor = cell.GetNeighbor(direction.Next()); if (direction <= HexDirection.E && nextNeighbor != null) { AddTriangle(v2, v4, v2 + HexMertics.GetBridge(direction.Next())); AddTriangleColor(cell.color, neighbor.color, nextNeighbor.color); } }
private void Triangulate(HexDirection dir, HexCell cell) { Vector3 center = cell.transform.localPosition; Vector3 v1 = center + HexMertics.GetFirstSolidCornor(dir); Vector3 v2 = center + HexMertics.GetSecondSolidCornor(dir); ///第一个顶点的位置为cell正中心,其余为cell的顶点 AddTriangle(center, v1, v2); AddTriangleColor(cell.color); ///根据方向获取相邻的节点 HexCell neighbor = cell.GetNeighbor(dir) ?? cell; HexCell preNeighbor = cell.GetNeighbor(dir.Previous()) ?? cell; HexCell nextNeighbor = cell.GetNeighbor(dir.Next()) ?? cell; if (dir <= HexDirection.SE) { TriangulateConnection(dir, cell, v1, v2); } //AddTriangle(v1, center + HexMertics.GetFirstCornor(dir),v3); //AddTriangleColor(cell.color, (cell.color + preNeighbor.color + neighbor.color) / 3, bridgeColor); //AddTriangle(v2, v4, center + HexMertics.GetSecondCornor(dir)); //AddTriangleColor(cell.color, bridgeColor, (cell.color + neighbor.color + nextNeighbor.color) / 3); }