5-2 创建地图块Prefab
在上一章中,我们为了让地图的尺寸更大,加入了“地图块”这个概念,并添加了相关的代码。在这一章中,我们将创建地图块的Prefab,
我们需要一个新的脚本,用来执行地图块的相关逻辑。代码如下:
1 | using UnityEngine; |
接下来回到Unity的Hierarchy面板中,复制HexGrid对象并重命名为HexGridChunk。删除HexGridChunk挂载的HexGrid.cs脚本,并使用HexGridChunk.cs来代替。然后将其拖入Prefabs文件夹中创建为一个Prefab,再将场景中的HexGridChunk物体删除。


由于逻辑顺序的改变,在地图初始化的时候,首先要创建地图块。所以我们在HexGrid中添加对HexGridChunk的引用,代码如下:
1 | public class HexGrid : MonoBehaviour |
代码部分完成后,将Prefab文件夹中HexGridChunk拖入到HexGrid组件的chunkPrefab栏中。如下图:

实例化地图块的逻辑,与实例化地图单元的逻辑相类似。这里我们在HexGrid中创建一个数组,用来保存地图块。代码如下:
1 | public class HexGrid : MonoBehaviour |
在HexGridChunk中实例化地图单元的思路,与之前直接在HexGrid中实例化地图单元类似。在Awake方法中设置相关参数,接着在Start方法中进行三角构建。与之前相同,HexGridChunk也需要引用其子物体的canvas和mesh组件实例,同时还需要一个数组来保存所有实例化的地图单元。不过我们在HexGridChunk中只是对数组进行初始化,并不会创建地图单元的实例,创建地图单元实例的步骤仍然在HexGrid中执行。代码如下:
1 | public class HexGridChunk : MonoBehaviour |
至此我们就完成了HexGridChunk.cs的初步功能。不过当前运行会报空引用的错误,这是因为HexGridChunk的hexMesh.Triangulate(cells);这个语句中,参数cells为空。在下一章中,我们将修改HexGrid.cs中的代码,将其创建的地图单元实例分配至各个HexGridChunk的数组中,这样就能解决空引用的错误了。