今天分享一下如何在Unity小游戏中制作小地图!

在Unity中制作小地图(或雷达)是游戏开发中常见的需求,用于展示游戏世界的局部或全局信息,帮助玩家更好地理解游戏环境。

基础准备

搭建场景

首先,你需要在Unity中搭建一个简单的游戏场景。这可以包括玩家角色、敌人、障碍物等。

创建新摄像机

  • 新建摄像机:在Unity的层级列表(Hierarchy)中,直接右键选择Camera来创建一个新的摄像机。命名为Minimap Camera以区分主摄像机。
  • 设置摄像机位置:将Minimap Camera的位置设置为主角上方或其他你需要的地方,高度和角度都可以根据需要调整,确保摄像机可以捕捉到整个场景或你想要在小地图上显示的部分。
  • 移除Audio Listener:因为场景中只能有一个Audio Listener,所以需要从Minimap Camera中移除Audio Listener组件。

创建Render Texture

在Unity的Assets文件夹中,右键点击选择Create -> Render Texture,创建一个新的Render Texture,命名为Small Map

添加Raw Image

在Canvas中右键点击,选择UI -> Raw Image来创建一个新的Raw Image,命名为Minimap Image

配置摄像机

设置Render Texture

分配Render Texture:选中Minimap Camera,在检视面板(Inspector)中找到Target Texture字段,将之前创建的Minimap Render Texture拖拽进去。

设置Raw Image

  • 分配Render Texture:将之前创建的Minimap Render Texture拖拽到Minimap ImageTexture字段中。

调整大小和位置

最后根据需要调整Minimap Image的大小和位置,确保它适合你的UI布局,小地图就做好啦!

丰富小地图操作

除了简单的地图显示之外,还可以添加一些交互操作,丰富玩家的体验。

比如我增加了放大、缩小按钮,还实现了点击小地图全屏查看,再次点击恢复的操作。

示例:

放大缩小:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using UnityEngine;

public class MapSize : MonoBehaviour
{
public GameObject player; // player

void Update()
{
// 保持在玩家上方
transform.position = new Vector3(player.transform.position.x, transform.position.y, player.transform.position.z);
}

// 将相机下移实现放大
public void Big()
{
if (transform.position.y > 20)
transform.position = new Vector3(transform.position.x, transform.position.y - 20, transform.position.z);
}

// 将相机上移实现缩小
public void Small()
{
if (transform.position.y < 400)
transform.position = new Vector3(transform.position.x, transform.position.y + 20, transform.position.z);
}
}

点击全屏:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using UnityEngine;

public class ClickMap : MonoBehaviour
{
public GameObject Mapp; // 地图
bool isBig = false; // 大小状态

public void Click()
{
if (isBig) smaller(); // 变小
else Bigger(); // 变大
}

// 通过改变Raw Image在Canvas的大小和位置来实现全屏效果
void Bigger()
{
isBig = true;
Mapp.GetComponent<RectTransform>().sizeDelta = new Vector2(1080, 1080);
Mapp.GetComponent<RectTransform>().anchoredPosition = new Vector2(960, -540);
GetComponent<RectTransform>().sizeDelta = new Vector2(1080, 1080);
GetComponent<RectTransform>().anchoredPosition = new Vector2(960, -540);
}

void smaller()
{
isBig = false;
Mapp.GetComponent<RectTransform>().sizeDelta = new Vector2(320, 320);
Mapp.GetComponent<RectTransform>().anchoredPosition = new Vector2(160, -160);
GetComponent<RectTransform>().sizeDelta = new Vector2(320, 320);
GetComponent<RectTransform>().anchoredPosition = new Vector2(160, -160);
}
}

更多有意思的操作层出不穷,这里只是做个示例哈。分享就到这里啦,别的文章再会!

—end—