2-11 优化双色混合区域
在上一章中,我们分析了应该如何进对颜色混合区域进行面数的优化,现在我们来实现这一功能。
首先我们来优化矩形颜色混合区域,也就是两个相邻地图单元的双色混合区域。目前的混合区域是使用两个矩形进行颜色混合,也就是4个三角面片。在这里我们把一侧的的颜色混合区域宽度增加一倍。也就是在HexMetrics.GetBridge
方法中,不再需要乘以0.5。
1 | public static Vector3 GetBridge(HexDirection direction) |
经过修改代码,现在一个矩形双色混合区域连接了两个地图单元。虽然通过·观察生成的Mesh兵没有发现什么问题,但其实在两个相邻的地图单元之间,仍然有两个矩形连接区域,只不过重叠了起来。而我们的需求是只有一个矩形双色混合区域来连接两个相邻的地图单元,所以这里要删除其中一个矩形双色混合区域。我们回到HexMesh.Triangulate(HexDirection direction, HexCell cell)
方法中。先注释掉所有与构建颜色混合区域和为颜色混合区域顶点赋值的方法。创建一个新的方法,用来专门负责颜色混合区域的构建,这样避免了重复计算,使整个代码结构更加清晰。
1 | private void Triangulate(HexDirection direction, HexCell cell) |
经过修改,我们就可以很容易的控制在单个地图单元的哪个方向生成颜色混合区域了。现在我们可以尝试只在每个地图单元的NE方向生成颜色混合区域。
1 | private void Triangulate(HexDirection direction, HexCell cell) |
根据运行结果来看,每个地图单元都生成了正确方位的双色混合区域。按照这个思路,其实每个地图单元都只需要生成NE、E和SE方向的双色混合区域就可以了,并且不会有双色混合区域的重合。
1 | private void Triangulate(HexDirection direction, HexCell cell) |
这样,每个地图单元之间都建立了双色混合区域连接。但是通过运行效果我们发现,在地图边缘处,有些地图单元会生成一些无用的双色混合区域连接。这里可以通过修改TriangulateConnection
方法中的代码去掉这些无用的双色混合区域连接。
1 | private void TriangulateConnection(HexDirection direction, HexCell cell, Vector3 v1, Vector3 v2) |
最后,我们完成了双色混合区域连接的优化,现在相邻地图单元之间只有两个三角面片组成了双色混合区域,相比之前所用的三角面片减少了一半。在下一章中,我们来优化三色混合区域。