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
的数组中,这样就能解决空引用的错误了。