unity minimap上的动态图标

Unity很容易做一个小地图,用rawImage再弄一个相机就行了。 但是现在,一个要求是,地图上的一些东西要加上图标,图标会随着地图对象的移动而移动。 然后我就上网下载了一个迷你地图插件UGUI MiniMap(牛! ......

unity制作小地图简单,用rawImage 再来个摄像机就行

但是现在一个需求就是地图上一些东西要加上图标,图标会随着地图物体的移动而移动

然后去网上下载了个小地图插件UGUI MiniMap(蛮牛可下) 但是他比较复杂,在研究了下他的代码,实现了一套自己的 简单小地图。

主要参考他的bl_MiniMapItem 脚本

第一步:搭建好小地图

unity小地图上的动态图标-风君子博客

RawImage就是显示小地图的render texture

Player作为子物体为玩家的图标

FPSController为玩家

挂上脚本CtrlMove.CS

unity小地图上的动态图标-风君子博客

做好关联

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CtrlMove : MonoBehaviour { public RectTransform RectRoot;//rawImage public Camera mapCamera;//小地图的摄像机 private Vector3 position;//只是一个变量,存储一些值 public GameObject cacheItem;//ui图标 private Image Graphic = null;//Image组件 /// <summary> /// 取自身坐标的x z坐标 /// </summary> public Vector3 TargetPosition { get { return new Vector3(transform.position.x, 0, transform.position.z); } } // Use this for initialization void Start () { Graphic = cacheItem.GetComponent<Image>();//图标 Graphic.GetComponent<RectTransform>().anchoredPosition = Vector2.zero;//重置xy坐标 } // Update is called once per frame void Update () { RectTransform rt = Graphic.GetComponent<RectTransform>(); Vector3 CorrectPosition = TargetPosition;//自己的x z坐标 Vector2 vp2 = mapCamera.WorldToViewportPoint(CorrectPosition);//将三维物体的世界坐标转换为视口坐标 position = new Vector2((vp2.x * RectRoot.sizeDelta.x) - (RectRoot.sizeDelta.x * 0.5f), (vp2.y * RectRoot.sizeDelta.y) - (RectRoot.sizeDelta.y * 0.5f)); //小地图的图标会根据实际物体的图标移动而移动 rt.anchoredPosition = position; } }

其实原理就是把实际物体的xz坐标 用WorldToViewportPoint转换成小地图坐标

即可实现这种功能

UGUI MiniMap 插件还可以继续研究下,里面还是有很多东西可取的,他的物体直接挂上一个bl_MiniMapItem脚本,会在小地图上自动生成一个小图标,和物体进行关联,这样物体动,小地图图标就会动,很方便