最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
Unity 小地图制作插件NJG MiniMap的简单使用
在 Unity 中制作小地图有多种方法,下面将详细介绍几种常见的实现方式。
方法一:利用 NJG MiniMap 插件
操作步骤
- 导入插件并添加预制体:导入 NJG MiniMap 插件后,在
Mesh Version -> Prefabs中,将NJG MiniMap(2D)拖入到场景中。 - 调整小地图设置:在 Hierarchy 中点击
MiniMap(位于NJG MiniMap(2D) -> UI Root -> Camera -> Anchor -> MiniMap),在 Inspector 中取消勾选UIMini Map On GUI -> Zoom Settings -> MouseWheel,并将Zoom值调为最小。 - 添加脚本并设置属性:给游戏主角和 NPC 各添加脚本
NJGMap Item(Script),设置Marker Type属性:主角设为2DMe,NPC 设为OtherPlayer。 - 去除小地图毛边:此时运行游戏可能会看到小地图有毛边,若想去掉毛边,重新设置
Mask为一个矩形的Texture。 - 运行游戏查看效果:运行游戏即可得到基本样式的小地图。
注意事项
小地图窗口会自动刚好俯视到场景中所有物体,所以应该确保所有物体都在地图的范围中,这样窗口范围和地图范围才能刚好吻合。
效果说明
如图所示,上方为小地图,下方为场景地图;小地图中靛色圆点为主角,绿色箭头为 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 Texture 和 Camera_Map。
提示信息
若开发中遇到 GUIText 显示文字时,小地图也会同时显示,这时考虑将 Camera_Map 的 GUILayer 禁用,即在 Inspector 面板中去掉对勾(此提示来源不详)。
最终效果
最终可得到相应的小地图效果。