游戏开发小结——在Unity中构建一个UI迷你地图(Minimap)

让我们使用UI Canvas创建一个基本的功能性迷你地图。我们首先需要一个Canvas,将其设置为Screen Space — Overly。还需要一个迷你地图背景的图形,如果需要,还需要一个蒙版(mask)。
在这里插入图片描述
使用蒙版(mask)后,我的迷你地图(Minimap)背景看起来是这样的。这个资源有一个很好的圆形形状可以焦点放在上面。此外,将锚点设置为右上角,并在X和Y轴上移动-60,中心点为中心,以使其在右上角中清楚地显示。
在这里插入图片描述

我还在中间添加了一个蓝色点来表示玩家的位置。
现在,我们需要一个脚本来管理我们的迷你地图。在迷你地图脚本内,我们需要获取四个引用:玩家游戏对象、敌人游戏对象、敌人位置点,以及迷你地图背景图像。

[SerializeField] private GameObject _player;
[SerializeField] private GameObject _enemy;
[SerializeField] private Image _enemyPOS;
[SerializeField] private Image _mapPOS;

在这里插入图片描述

然后,使用这些信息,让地图的位置对应于玩家的位置。

private void Update()
{
    _mapPOS.rectTransform.localPosition = 
        new Vector3(-1 *_player.transform.position.x, -1 * _player.transform.position.z, 0);
}

为此,我们将_mapPOS.rectTransform.localPosition设置为等于玩家的位置x和z(由于地图是2D,它不使用3D y位置,因此z代替y,z为0)。每个值都乘以-1以反转(invert)它们的值。
在这里插入图片描述

您可以看到地图在右上角随着玩家的移动而移动。
现在,我们添加另一行以跟踪敌人,我们将_enemyPOS.rectTransform.localPosition(即迷你地图点)设置为敌人游戏对象的position.x和position.y,就像玩家和地图一样。

private void Update()
{
    _mapPOS.rectTransform.localPosition = 
        new Vector3(-1 *_player.transform.position.x, -1 * _player.transform.position.z, 0);
    
    _enemyPOS.rectTransform.localPosition =
        new Vector3(_enemy.transform.position.x, _enemy.transform.position.z, 0);
}

这样,当我们移动敌人时,敌人将在迷你地图(minimap)上移动。
这非常基本,但也可以扩展很多,例如可以在对象池中连接和实例化(instantiate)各个敌人,并在启用时出现在迷你地图(minimap)上,使事情非常模块化。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐