3-3 设置地图单元Mesh的高度
在上一章中我们为地图单元添加了高度属性,并完成了简单的UI,来为被点击的地图单元赋值高度信息。但是在构建地图Mesh的时候,并没有将这个高度值应用到被点击的地图单元上。这里我们就来实现这个功能,首先将HexCell
中的elevation
字段转换为属性。
1 | private int elevation; |
然后在赋值高度的同时,修改地图单元Mesh的垂直坐标。
1 | public int Elevation |
因为将elevation
字段转换为了属性,回到HexMapEditor.EditCell
里将赋值语句的错误修改掉,
1 | private void EditCell(HexCell cell) |
MeshCollider是否能吻合新的高度地图?
旧版本的Unity需要在设置相同的Mesh信息之前先把MeshCollider设为null,它只是假设Mesh的数据不会改改变,所以只有不同的Mesh(或者null)能触发碰撞器的刷新,现在已经没这个必要了。所以我们现在的方法:在三角构建之后重新分配MeshCollider的Mesh信息,这是可行的。
现在通过UI设置高度之后,点击一个地图单元,我们就可以看到被点击的地图单元升高了对应的高度。但是这里还有两个问题:
第一:跟随地图单元的坐标并没有随着地图单元的高度高边而改变,当地图单元高度变化的时候,其对应的坐标依然还是在水平高度上。
第二:地图单元之间的连接错误。颜色混合区域连接着两个相邻的地图单元,当两个地图单元的垂直高度不相同的时候,颜色混合区域应该依然连接着两个地图单元,因为高度不同只是被拉伸了而已。
在接下来的章节中,我们将会解决这些问题。