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

posted @ 2015-01-11 12:44  盘子脸  阅读(1557)  评论(0编辑  收藏  举报