5-3 将地图单元分配到不同的地图块中
在上一章中,我们创建了地图块的Prefab,并完成了其相关的脚本。在最后一流了一个问题,就是HexGridChunk.Start
方法中的hexMesh.Triangulate(cells);
语句会报空引用的错误,这是因为地图块只创建了存放地图单元实例的数组,而这个数组是空的。创建地图单元实例的语句是在HexGrid
中,我们需要做的就是将创建的地图单元实例添加到其对应的地图块数组中,而不是在HexGrid
中设置其父级和进行三角构建。代码如下:
1 | private void CreateCell(int x, int z, int i) |
我们可以通过地图单元在HexGrid.cells
数组中的横纵坐标,计算出当前地图单元应该属于哪个地图块。代码如下:
1 | private void AddCellToChunk(int x, int z, HexCell cell) |
通过计算结果,我们还可以知道当前地图单元在其对应地图块数组中的下标。有了这个下标,我们就可以将当前地图单元实例分配到对应的地图块数组中了。代码如下:
1 | private void AddCellToChunk(int x, int z, HexCell cell) |
接着,我们回到HexGridChunk
中,创建AddCell
方法。这个方法负责将地图单元实例添加到自身数组中,并且设置地图单元及其UI的父节点。代码如下:
1 | /// <summary> |
至此我们就完成了将地图单元实例分配到期对应地图块中的功能了。不过现在的代码还是有一些需要清理的地方,例如在HexGrid
中依然有进行三角构建的的相关方法。在下一章中,我们要清理这些遗留的代码,让整个地图系统正常运行。