5-13 坐标显示UI开关

  在上一章中,我们创建了笔刷功能,可以通过选择笔刷尺寸,来批量修改地图单元的颜色或高度。在这一章中,我们将做一个开关,用来隐藏或显示地图单元上的UI坐标。这是因为在之后的编辑地图中,我们并不需要时刻看到这些UI坐标,它们的存在有时候反而会妨碍我们对地图的编辑和查看。
  由于整个大地图是由多个地图块拼接而成的,每一个地图块都有自己的canvas,所以需要在HexGridChunk.cs中添加一个ShowUI方法,来控制当前地图块的UI显示和隐藏。代码如下:

HexGridChunk.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
public class HexGridChunk : MonoBehaviour
{


/// <summary>
/// 控制当前地图块上的坐标显示UI 关闭/显示
/// </summary>
/// <param name="visible">UI坐标显示状态</param>
public void ShowUI(bool visible)
{
gridCanvas.gameObject.SetActive(visible);
}
}

  同时,在Awake方法中,默认关闭UI。代码如下:

HexGridChunk.cs
1
2
3
4
5
6
7
private void Awake()
{


//默认关闭坐标的UI显示
ShowUI(false);
}

  在地图编辑器中是通过一个按钮控制所有坐标UI的显示和隐藏,所以这里我们要在HexGrid.cs中也同样添加一个ShowUI方法,这个方法遍历所有的地图块,并控制其坐标UI的显示和隐藏。代码如下:

HexGrid.cs
1
2
3
4
5
6
7
8
9
10
11
/// <summary>
/// 控制所有地图块的坐标显示UI的 显示/隐藏
/// </summary>
/// <param name="visible">所有UI的显示状态</param>
public void ShowUI(bool visible)
{
for (int i = 0; i < chunks.Length; i++)
{
chunks[i].ShowUI(visible);
}
}

  在HexMapEditor.cs中,也同样添加一个方法,供UI调用,将UI的状态传递至HexGrid.cs中。代码如下:

HexMapEditor.cs
1
2
3
4
5
6
7
8
/// <summary>
/// 通过UI组件修改坐标UI的显示/隐藏
/// </summary>
/// <param name="visible">UI坐标显示的状态</param>
public void ShowUI(bool visible)
{
hexGrid.ShowUI(visible);
}

  回到Unity中,我们在地图编辑器中创建一个Toggle组件,并将HexMapEditor.ShowUI方法绑定到组件上即可。如下图:

  至此我们就完成了坐标显示UI开关的功能了,在程序启动时,是默认关闭所有UI显示的,通过点击最下方的Label开关,可以控制坐标显示UI的开启和关闭,从而达到印象或者显示全部坐标的效果。
  在下一章中,我们将会对现有的UI作出一些修改,例如现在显示高度和笔刷范围,并不能看到数值,这在编辑的时候会很不方便。

Github代码