Unity 制作RPG地图2(自己控制地图上图标)

上一次用Unity摄像机方式实现了地图的制作,现在介绍另一种实现地图的方式: 自己通过代码实现小地图NCP图标的显示和隐藏

制作地图的步骤:

        1. 根据游戏人物的3D坐标转换成2D平面坐标,根据距离显示和隐藏游戏的坐标

        2. 怪物实时判断与玩家的距离,小于到移动范围,就在小地图上创建Icon的显示

 

注意事项:

1. 人物移动前进和后退是(x,z)轴, 我们从游戏界面看到的图标是(x,y)轴

 

image

 

代码:

小地图类:

using UnityEngine;

using System.Collections;





/// <summary>

/// 小地图

/// </summary>

public class MinMap : MonoBehaviour {



    public static MinMap _instance;

    public GameObject iconPrefab;       //小图标预设,根据不同的名字显示不同的图标



    void Awake() 

    {

        _instance = this;

    }



    /// <summary>

    /// 在小地图添加图标

    /// </summary>

    /// <param name="iconName"></param>

    /// <returns></returns>

    public GameObject AddIcon(string iconName) 

    {

        GameObject go = NGUITools.AddChild(this.gameObject,iconPrefab);

        go.GetComponent<UISprite>().spriteName = iconName;

        return go;

    }





}

 

Icon类: (在小地图上添加图标,交给怪物和NCP自身)

using UnityEngine;

using System.Collections;



public class MinMapItems : MonoBehaviour {



    public string iconName;

    private GameObject minimapIconGO;

    private Transform minmapTrans;

    private Transform playerTrans;



    public float magnitudeX = 8;

    public float magnitudeZ = 7.5f;

    

    void Start() 

    {

        minimapIconGO = MinMap._instance.AddIcon(iconName);                         //将怪物图标初始化到小地图显示

        minmapTrans = minimapIconGO.transform;                                      //怪物的小图标

        playerTrans = GameObject.FindGameObjectWithTag("Player").transform;         //获取主角transfrom



    }



    void FixedUpdate() 

    {

        Vector3 offset = transform.position - playerTrans.position;

        minmapTrans.localPosition = new Vector3(offset.x,offset.z,0) * 8;



        //localPosition和position的区别

        

        



        //怪物超过一定范围,显示和隐藏地图图标

        if (Mathf.Abs(offset.x) >= magnitudeX || Mathf.Abs(offset.z) >= magnitudeZ)

        {

            minimapIconGO.SetActive(false);

        }

        else 

        {

            minimapIconGO.SetActive(true);

        }



        //Debug.Log(offset.z);



    }



    void OnDestroy() 

    {

        Destroy(this.minimapIconGO);

    }



}

 

源代码 :  http://yunpan.cn/cy8wW4eHQgHZH  提取码 3681

你可能感兴趣的:(unity)