3-5 修复相邻地图单元连接区域

  在上一章中,我们修复了地图单元与其对应UI高度不同的问题。在这一章中,我们来修复两个相邻且高度不同的地图单元,它们之间的连接处断裂的问题。
  先回到HexMesh.TriangulateConnection方法中,在这个方法里我们计算了连接区域的每个顶点。与改变UI高度的思路相似,这里只需要将计算后的两个顶点加上高度即可。

HexMesh.cs
1
2
3
4
5
6
7
8
9
private void TriangulateConnection(HexDirection direction, HexCell cell, Vector3 v1, Vector3 v2)
{


//这里为连接相邻cell的v3 v4顶点加上其所在cell的高度
v3.y = v4.y = neighbor.Elevation * HexMetrics.elevationStep;


}

  现在我们已经修复了矩形颜色混合区域断裂的问题了。三角形颜色混合区域的思路相同,但是略微复杂一些。

HexMesh.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void TriangulateConnection(HexDirection direction, HexCell cell, Vector3 v1, Vector3 v2)
{


if (direction <= HexDirection.E && nextNeighbor != null)
{
//声明一个新的vector3变量来存储高度改变后的顶点位置
//v5的本质其实就是v2 + HexMetrics.GetBridge(direction.Next()加上高度值
Vector3 v5 = v2 + HexMetrics.GetBridge(direction.Next());
v5.y = nextNeighbor.Elevation * HexMetrics.elevationStep;

AddTriangle(v2, v4, v5);


}
}

  这样,我们就完成了所有连接区域的修复了。现在通过UI设置高度之后,点击任意的地图单元,其对应的坐标、周围的连接区域都完全正常了。但是连接区域部分只是简单的进行了拉伸,当两个相邻的地图单元高度差很大的时候,会显得比较突兀,而且整个地图的细节不够。在接下来的章节中,我们来丰富连接区域的细节,让连接区域更加有层次感。

[Github代码](