unity小地圖上的動態圖標


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM