1-2 构建地图单元容器
在1-1中,我们用代码创建了一个正六边形地图单元的基本结构,接下来,为了构建正六边形地图系统,首先需要构建一个正六边形地图单元实例。首先创建HexCell
组件。这里不在此脚本中填写任何代码。
1 | using UnityEngine; |
接下来在场景中创建一个Plane,重命名为Hex Cell,挂载HexCell
组件,并且把这个Plane创建为Prefab。如下图:
然后创建一个空物体,命名为Hex Grid,用来容纳地图单元。创建HexGrid
脚本,并声明三个变量,分别表示在该容器中,地图单元的行数、列数和地图单元预置,代码如下:
1 | using UnityEngine; |
地图单元的容器创建完成后,将Width和Height的值都设置为6,将之前创建好的HexCell预置拖入Hex Cell框内。
现在,需要完成创建地图单元的代码,这里使用一个嵌套的for循环来创建地图单元,Width为每一行中有多少个地图单元,Height为行数。最后,将创建好的地图单元实例,存储在一个二维数组中,便于后期的查找和修改。HexGrid
脚本添加代码如下:
1 | //存放实例化的地图单元 |
这里要注意一点,在Unity中,一个默认Panel为10x10单位。所以在CreateCell
方法中,position.x = x * 10f
和position.z = z * 10f
中的10f便是Panel的边长,要每次移动Panel边长的距离,让各个地图元素相邻。生成效果如下:
至此,已经成功的生成了由正方形单元组成的地图网格。但是由于每个地图单元是紧紧相邻的,在Game窗口中很难快速定位每一个地图单元的位置,如果是正六边形的地图单元,这种情况还可能更加混乱。下一步,为了方便以后的调试和更加直观的查看,我们将为每一个地图单元加上自身的坐标。