4-8 修复连接区域
在上一章中,我们完成了对每个地图单元整体进行海拔高度的扰动,但是我们在改变地图单元高度的时候,发现其相邻的连接区域并没有与地图单元相连接,产生了大量的破面。这是因为在构建连接区域的时候,并没有使用地图单元扰动后的高度。在HexCell.cs
中我们添加一个属性,这样就可以在任何地方得到地图单元扰动后的坐标了。代码如下:
1 | public class HexCell : MonoBehaviour |
这样,我们就能在HexMesh.Triangulate
方法中使用这个属性,来获得地图单元扰动后的位置了。代码如下:
1 | private void Triangulate(HexDirection direction, HexCell cell) |
接着,在TriangulateConnection
方法中,获取相邻地图单元位置时,也使用扰动后的坐标。代码如下:
1 | private void TriangulateConnection(HexDirection direction, HexCell cell, Vector3 v1, Vector3 v2) |
至此我们修复了地图单元相邻的连接区域高度不同,产生破面的问题。但是我们观察发现,在Cliff高度差类型的连接中,三角形连接区域会与矩形连接区域之间产生破面。这是因为插值计算斜边上一点的时候,使用的是扰动之前的坐标点。这个问题我们将随着细分地图单元及其周边连接区域,提升市局效果和细节的同事进行解决。