Unity:小地图 Minimap

、制作地图素材

实时渲染:主场景和小地图各需要渲染一次,非常耗性能。

预渲染:地图顶视图渲染成一张图片(推荐☆☆☆

美术制作:纯粹靠美术手绘,可能跟实际不符。

好的,我们用最简单粗暴的方法,调整到Top视角,把Scene拉到最大,直接截图。放到Resources目录下,方便后面切换地图时加载小地图。

二、制作小地图UI

1. 创建一个空物体Minimap,锚点定位到右上角,拉出来小地图所占的区域大小。

2. 创建一个子物体Image_Border,用来放小地图的边框。

3.创建一个子物体Image_Mask,用来放Mask,记得添加Mask组件。

4.Mask下创建一个子物体Image_minimap,这个就用来动态加载小地图图片啦!

三、配置小地图并加载

配置信息:地图ID、地图名字、地图类型(PVE?PVP?)、Resources里的文件名...

配置方式:可以用Excel写,然后用Excel2Json工具,或者直接用Json写。

 加载:Minimap上挂载脚本

在Start()里初始化,加载小地图图片。

1 void Init()
2 {
3     //加载小地图图片
4     this.minimap.overrideSprite = Resources.Load<Sprite>("UI/Minimap/MainCity");
5     // 跟手动操作一样,设置成原始大小
6     this.minimap.SetNativeSize();
7     // 局部坐标全为0
8     this.minimap.transform.localPosition = Vector3.zero;      
9 }

在Update()里更新小地图位置信息。

 1 //制作一个Cube与地形完全重合,获取Collider,根据Collider得到地图的长宽
 2 public Collider minimapBoundingBox;
 3 //一个向上的箭头代表玩家的位置
 4 public Image arrow;
 5 void Update()
 6 {
 7     //获取地图的长宽
 8     float realWidth = minimapBoundingBox.bounds.size.x;
 9     float realHeight = minimapBoundingBox.bounds.size.z;
10     //角色坐标转化成地图坐标
11     float relaX = playerTransform.position.x - minimapBoundingBox.bounds.min.x;
12     float relaY = playerTransform.position.z - minimapBoundingBox.bounds.min.z;
13     //小地图是跟着玩家走的,可以把玩家的位置设置为中心点,这样玩家就始终在小地图中心了。
14     float pivotX = relaX / realWidth;
15     float pivotY = relaY / realHeight;
16     this.minimap.rectTransform.pivot = new Vector2(pivotX, pivotY);
17     this.minimap.rectTransform.localPosition = Vector2.zero;
18     //箭头跟着玩家旋转,玩家是绕y轴旋转的,而小地图箭头是绕z轴旋转的
19     this.arrow.transform.eulerAngles = new Vector3(0, 0, -playerTransform.eulerAngles.y);
20 }

好了一个简易的只显示玩家位置的小地图就做好了。

posted @ 2022-02-09 23:00  番茄玛丽  阅读(837)  评论(0编辑  收藏  举报