Unity3D_(插件)小地圖自刷新制作Minimap小地圖


 

 

   制作小地圖:小地圖自刷新制作小地圖

   原理:用不同的圖標表示場景中不同的游戲物體,將(場景中)游戲物體位置實時放置小地圖上,並控制圖標的位置更新

   好處:可更好控制小地圖上所需要顯示的游戲物體

 

  游戲項目已托管到Github上:  傳送門

  使用Camera渲染制作Minimap小地圖:  傳送門

 

小地圖效果

 (不足:並未對超出地圖中的物體進行銷毀~)

 

 

腳本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Minimap : MonoBehaviour {

    //單例模式
    public static Minimap _instance;
    public GameObject iconPrefab;

    void Awake()
    {
        _instance = this;
    }

    public GameObject AddIcon(string iconname)
    {
        GameObject go = NGUITools.AddChild(this.gameObject,iconPrefab);
        //設置圖標的名字,更新圖標的顯示
        go.GetComponent<UISprite>().spriteName=iconname;

        //把創建出來的圖標返回出來
        return go;
    }
}
Minimap.cs

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MinimapItem : MonoBehaviour {

    public string iconName;
    private GameObject minimapIconGo;
    private Transform iconTrans;
    private Transform player;

    void Start()
    {
        player = GameObject.FindGameObjectWithTag("Player").transform;
        minimapIconGo = Minimap._instance.AddIcon(iconName);
        iconTrans = minimapIconGo.transform;
    }

    private void FixedUpdate()
    {
        Vector3 offset = transform.position - player.position;
        iconTrans.localPosition = new Vector3(offset.x, offset.z, 0)*5;
    }

    void OnDestroy()
    {
        Destroy(this.minimapIconGo);    
    }

}
MinimapItem.cs

 

預制場景

  創建一個場景Gary_map

  調整場景燈光亮度Intensity為0.3

  添加一個Plane地面,給地面添加材質模擬地圖場景

  添加一個Capsule物體作為玩家Player,為Player綁定PlayerMove腳本控制其移動

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour {

    public float speed = 4;

    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        transform.Translate(new Vector3(h,0,v)*speed*Time.deltaTime);
    }
}
PlayerMove.cs

 

  添加幾個Capsule物體作為敵人Enemy,給Enemy添加腳本使其隨機移動

  添加材質給Player,區別於敵人

  添加Ground標簽給地面,Human標簽給玩家和敵人(目的:只用來作為攝像機Culling Mask渲染層級,不做玩家和敵人區分)

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyMove : MonoBehaviour {

    public float speed =4;

    private float timer = 0;
    private float dirx = 0;
    private float dirz = 0;
    // Update is called once per frame
    void Update () {
        timer += Time.deltaTime;
        if (timer > 4)
        {
            dirx = Random.Range(-1f, 1f);
            dirz = Random.Range(-1f, 1f);
            timer = 0;
        }
        transform.Translate(new Vector3(dirx, 0, dirz) * speed * Time.deltaTime);
    }
}
EnemyMove.cs

 

 

 實現過程

 

  為了讓圖標顯示在小地圖上,先使用NGUI將要顯示在地圖上的圖標制作成圖集(Atlas Maker)

  圖集用來顯示不同的游戲物體對象,相同的游戲物體對象用同一種圖集來表示

 

  添加一個UI Root,Delete掉背景,在Scene場景中添加一個Sprite用來顯示小地圖圖標,將Sprite放置在UI Root右上角

  將UI Sprite下的Atlas圖集選擇Wooden Atlas,Sprite選擇Highlight-Shadowed圖集

  將其類型設置為Sliced(可剪切的),透明度可適當調低(opacity:100),位置Anchors設置為右上角

  將其重命名為minimap-bg

  minimap-bg作為所顯示小地圖的背景(圓形會更好)

 

  UI Root下創建一個Container容器,作為minimap的整體,位置設置為右上角

  UI Root下創建一個Sprite圖片,用來表示玩家icon,將其重命名為player-icon

  將player-icon和minimap-bg放置在minimap父物體下

  player-icon代表游戲玩家,一般制作時都將游戲玩家顯示在地圖的正中心

 

  將player-icon制作為預制體minimap-ngui-icon

  在minimap上添加Minimap腳本,通過Minimap腳本獲得場景中游戲物體的圖標的名字,實時更新圖標的顯示

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Minimap : MonoBehaviour {

    //單例模式
    public static Minimap _instance;
    public GameObject iconPrefab;

    void Awake()
    {
        _instance = this;
    }

    public GameObject AddIcon(string iconname)
    {
        GameObject go = NGUITools.AddChild(this.gameObject,iconPrefab);
        //設置圖標的名字,更新圖標的顯示
        go.GetComponent<UISprite>().spriteName=iconname;

        //把創建出來的圖標返回出來
        return go;
    }
}
Minimap.cs

 

  給player添加Player標簽,添加Minimap Item腳本

  Minimap Item腳本上引用Icon Name表示物體在小地圖上所顯示的圖標

  給Player和Enemy1、2、3、4、5綁定Minimap Item腳本

  綁定Minimap Item腳本的物體會返回一個Sprite圖片類型,這個圖片將在小地圖上顯示且不斷的刷新與Player的位置

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MinimapItem : MonoBehaviour {

    public string iconName;
    private GameObject minimapIconGo;
    private Transform iconTrans;
    private Transform player;

    void Start()
    {
        player = GameObject.FindGameObjectWithTag("Player").transform;
        minimapIconGo = Minimap._instance.AddIcon(iconName);
        iconTrans = minimapIconGo.transform;
    }

    private void FixedUpdate()
    {
        Vector3 offset = transform.position - player.position;
        iconTrans.localPosition = new Vector3(offset.x, offset.z, 0)*5;
    }

    void OnDestroy()
    {
        Destroy(this.minimapIconGo);    
    }

}
MinimapItem.cs

 

  小地圖上就能實時顯示游戲場景中Icon的位置了

 

  小地圖與場景中比例控制  1:5

    private void FixedUpdate()
    {
        Vector3 offset = transform.position - player.position;
        iconTrans.localPosition = new Vector3(offset.x, offset.z, 0)*5;
    }

 


免責聲明!

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



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