3-6 阶梯状的连接区域
在之前的章节中我们修复了地图单元对应UI高度和连接区域断裂的问题。同时我们也发现一个问题,在两个相邻且有高差的地图单元之间,连接区域只是被简单的拉伸了。如果高差很大的话,这个现象就更加明显。在接下来的章节中,我们来丰富连接区域的细节。
增加连接区域的具体方式,我们可以参考《无尽传奇》这个游戏。将一个倾斜的连接区域插入两段阶梯,如下图所示。这样一个完整的斜面就被分为了三个小斜面。每个斜面之间用平面相连接。这就需要我们把这个阶梯斜面分为五个部分来看。
我们回到HexMetrics.cs
中,在这里定义每个连接面中需要插入阶梯的数量,并由此计算出整个连接区域会被拆分成几个部分。
1 | public static class HexMetrics |
接下来我们需要计算被拆分出来连接区域中每个部分的顶点的位置。通过观察上图我们发现,如果设左下角的顶点为阶梯的起始点,也就是第0步,那么在Y坐标有变化的顶点,都是奇数步上的顶点。按照这个规律就可以得到一个梯田状的连接区域了。在HexMetrics.cs
中添加一个特殊的插值方法来实现这个功能。
1 | /// <summary> |
通过观察上图我们还发现,每个顶点的插值分为两部分,一个是垂直方向的,一个是水平方向的。这里先通过步长计算出每个顶点的水平坐标。
1 | //横向每个步长占整体长度的比例 |
两个值之间的插值是怎么计算的?
两个值$ a $
和$ b $
之间的插值,需要第三个插入值$ t $
。当$ t $
为0时,结果就是$ a $
。当$ t $
为1时,结果就是$ b $
。当$ t $
为0到1之间的某个值时,结果为$ a $
和$ b $
之间的某个值。所以插值公式为$ (1-t)a+tb $
。这个公式可以变成$ (1-t)a+tb=a-ta+tb=a+t(b-a) $
。其中$ t $
的值相当于向量$ b-a $
从$ a $
到$ b $
移动的距离。这样简化之后,所需要的乘法计算步骤更少。
接下来我们要设置步长中每个顶点的的Y坐标。因为只有在奇数步长的时候,Y坐标才会改变,所以这里使用$ \frac{step+1}{2} $
来计算。这里只取商的整数部分,相当于把序列1, 2, 3, 4
变成了1, 1, 2, 2
。
1 | //纵向每个步长占整体长度的比例 |
每个步长顶点的坐标计算完成后,我们还需要计算每个步长顶点的颜色值。这里相较于计算坐标更加简单。每个顶点的颜色值,只需要根据水平位置的插值来计算就可以了。
1 | /// <summary> |
这样,我们就完成了计算阶梯连接区域中,每个步长顶点的位置、颜色的功能了。在下面的章节中,我们将调用这些方法来实现矩形连接区域的三角构建。
[Github代码](