unity制作小地圖簡單,用rawImage 再來個攝像機就行
但是現在一個需求就是地圖上一些東西要加上圖標,圖標會隨着地圖物體的移動而移動
然后去網上下載了個小地圖插件 UGUI MiniMap(蠻牛可下) 但是他比較復雜,在研究了下他的代碼,實現了一套自己的 簡單小地圖。
主要參考他的 bl_MiniMapItem 腳本
第一步:搭建好小地圖

RawImage就是顯示小地圖的render texture
Player作為子物體為玩家的圖標
FPSController為玩家
掛上腳本 CtrlMove.CS

做好關聯
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腳本,會在小地圖上自動生成一個小圖標,和物體進行關聯,這樣物體動,小地圖圖標就會動,很方便
