1-3 创建地图单元坐标UI
在之前的步骤中,我们已经生成了一个6x6的矩形地图网格,为了方便之后的调试与观察,这里需要显示每个地图单元在地图网格内的坐标。
在场景中创建一个Canvas,并且按照以下步骤对Canvas作出修改:
- 将Canvas设置为“Hex Grid”的子物体
- 重命名为Hex Grid Canvas
- 删除Graphic Raycaster组件
- 将Canvas组件的Render Mode属性设置为
World Space
- 在x轴方向旋转90度
- 设置Canvas Scaler组件的Dynamic Pixels Per Unit值为10
- 删除场景中的“EventSystem”物体
下图为Hex Grid Canvas设置完成后的效果:
对Canvas做好属性设置之后,创建一个Text子物体,具体设置步骤如下:
- Text重命名为Hex Cell Label
- Width为5,Height为15
- Text组件的Font Size值为4
- Text组件的Alignment为水平居中、垂直居中
- 删除Text组件中默认的初始文字内容
- 将Hex Cell label创建为Prefab
下图为Hex Cell label设置完成后的效果:
接下来,需要在创建地图单元的时候,同时创建Hex Cell Label,并且把自身的坐标位置显示出来。根据这个思路修改脚本,代码如下:
1 | using UnityEngine.UI; |
添加代码完成后,将Hex Grid Canvas设置为Hex Grid的子物体,这样才能使gridCanvas = GetComponentInChildren<Canvas>();
正常执行。最后将之前创建的Hex Cell Label预置拖入Hex Grid
脚本的cellLabelPrefab
变量中。效果如下图:
创建了Hex Grid Canvas和Hex Cell Label的联系之后,接着要在创建地图单元的时候,同时实例化Hex Cell Label预置,位置与实例化的Hex Cell位置相对应,同时显示出实例化Hex Cell在数组中的位置,也就是坐标,代码如下:
1 | private void CreateCell(int x, int z, int i) |
代码完成后,运行效果如下图:
下一章里,我们要重新排列地图单元的位置,使其符合正六边形地图单元的排列方式。