3-2 简单的地图单元高度编辑器
我们已经为地图单元增加了高度属性,并且规定了一个高度单位是多少个Unity3D中的单位。与之前为地图单元赋值颜色类似,现在我们需要先完成一个简单的UI,利用Slider
来控制地图单元的高度。在鼠标点击地图单元的时候,为被点击的地图单元同时赋值已选中的颜色和高度。
我们先从HexGrid.ColorCell
方法入手,将方法名改为GetCell
,返回值为被点击地图单元的实例,并且在这个方法里不再重新构建整所有的地图单元。
1 | /// <summary> |
因为GetCell
已经不再重新构建整个地图了,所以我们将这部分单独创建一个方法,也方便今后进行调用。
1 | /// <summary> |
接着我们回到HexMapEditor.cs
中,在这里我们创建EditCell
方法,这个方法中为被点击的地图单元赋值颜色和高度,并刷新整个地图,而在HandleInput
方法中,只要调用它就可以了。
1 | private void HandleInput() |
现在的EditCell
方法中只有赋值颜色的部分,这里需要添加赋值高度的部分。和赋值颜色的思路一样,我们首先添加一个变量用于获取当前UI选中的高度,然后再将这个高度赋值给被点击地图单元的实例。
1 | public class HexMapEditor : MonoBehaviour |
和UI选取颜色一样,需要有一个方法被UI调用,来设置选中的高度。这里使用Slider组件来实现这个功能,由于Slider组件所产生的是float
类型的数据,所以我们需要接收float
类型的值,并将这个值转换成int
类型。
1 | /// <summary> |
我们回到Unity3D编辑器中,选中Hex Map Editor
,添加一个Slider组件(GameObject / Create / Slider)。并调整其大小、位置和方向如下图所示。
接着将Slider组件的取值范围设置为取整数值(Whole Numbers),并设置其取值范围为0-6。最后将OnValueChanged事件与HexMapEditor.SetElevation
方法相关连。
这样,我们就初步完成了一个通过UI来为被点击的地图单元赋值高度的功能了。不过现在只是将高度值赋值到了被点击的地图单元实例中,并没有在构建三角面片的时候对地图单元的mesh作出改变。在接下来的一章中,我们来实现这个功能。