在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 Image
的Texture
字段中。

调整大小和位置
最后根据需要调整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;
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(); }
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—