1. 首页菜单

Unity 小地图制作插件NJG MiniMap的简单使用

2015年01月15日 16:58 0 点赞 0 评论 更新于 2025-11-21 14:30

在 Unity 中制作小地图有多种方法,下面将详细介绍几种常见的实现方式。

方法一:利用 NJG MiniMap 插件

操作步骤

  1. 导入插件并添加预制体:导入 NJG MiniMap 插件后,在 Mesh Version -> Prefabs 中,将 NJG MiniMap(2D) 拖入到场景中。
  2. 调整小地图设置:在 Hierarchy 中点击 MiniMap(位于 NJG MiniMap(2D) -> UI Root -> Camera -> Anchor -> MiniMap),在 Inspector 中取消勾选 UIMini Map On GUI -> Zoom Settings -> MouseWheel,并将 Zoom 值调为最小。
  3. 添加脚本并设置属性:给游戏主角和 NPC 各添加脚本 NJGMap Item(Script),设置 Marker Type 属性:主角设为 2DMe,NPC 设为 OtherPlayer
  4. 去除小地图毛边:此时运行游戏可能会看到小地图有毛边,若想去掉毛边,重新设置 Mask 为一个矩形的 Texture
  5. 运行游戏查看效果:运行游戏即可得到基本样式的小地图。

注意事项

小地图窗口会自动刚好俯视到场景中所有物体,所以应该确保所有物体都在地图的范围中,这样窗口范围和地图范围才能刚好吻合。

效果说明

如图所示,上方为小地图,下方为场景地图;小地图中靛色圆点为主角,绿色箭头为 NPC,圆点和绿色箭头来自插件中。

方法二:通过角色在原地图中的位置比例来确定角色在小地图中的位置

以下是实现该方法的代码:

public class Map : MonoBehaviour {
public Texture map; // 小地图图片、地图的俯视图
public Texture playerTexture; // 在小地图中代表角色的标识
float cubePosX = 0; // 角色在小地图中的位置 x
float cubePosY = 0; // 角色在小地图中的位置 y
public GameObject player;
public GameObject plane; // 场景中的地图
float planeWidth;
float planeHeight;
float scale = 1.0f; // 缩放比

void Start() {
planeWidth = plane.GetComponent<MeshFilter>().mesh.bounds.size.x * (plane.transform.localScale.x);
planeHeight = plane.GetComponent<MeshFilter>().mesh.bounds.size.z * (plane.transform.localScale.z);
}

void Update() {
// 通过场景地图中的位置比例 (player.transform.position.x/planeWidth) 来确定角色在小地图中的位置
cubePosX = map.width * player.transform.position.x / planeWidth;
cubePosY = 159 - map.height * player.transform.position.z / planeHeight;
}

void OnGUI() {
GUI.DrawTexture(new Rect(0, 0, map.width * scale, map.height * scale), map);
GUI.DrawTexture(new Rect((cubePosX + 6) * scale, (cubePosY - 34) * scale, 5, 5), playerTexture);
}
}

代码解释

  • Start 方法:在游戏开始时,计算场景中地图的宽度和高度。
  • Update 方法:在每一帧更新时,根据角色在场景地图中的位置比例,计算角色在小地图中的位置。
  • OnGUI 方法:在 GUI 绘制时,绘制小地图和角色标识。

方法三:实时小地图(此方法基于方法四,建议先看方法四)

遇到的问题

在按照方法四(转载)的介绍操作后,未能做出与作者完全一样的效果。出现的问题是 Camera_Map 输出到 New Render Texture 的图像大小与 New Render Texture 的大小难以完全重合,花费了较多时间进行调整。

改进思路

方法四借助 New Render Texture 显示 Camera_Map 的输出图像,借助 Camera_UI 输出到屏幕。由此想到,直接将 Camera_Map 的图像输出到屏幕,无需 New Render TextureCamera_Map

提示信息

若开发中遇到 GUIText 显示文字时,小地图也会同时显示,这时考虑将 Camera_MapGUILayer 禁用,即在 Inspector 面板中去掉对勾(此提示来源不详)。

最终效果

最终可得到相应的小地图效果。