上一次用Unity摄像机方式实现了地图的制作,现在介绍另一种实现地图的方式: 自己通过代码实现小地图NCP图标的显示和隐藏
1. 根据游戏人物的3D坐标转换成2D平面坐标,根据距离显示和隐藏游戏的坐标
2. 怪物实时判断与玩家的距离,小于到移动范围,就在小地图上创建Icon的显示
1. 人物移动前进和后退是(x,z)轴, 我们从游戏界面看到的图标是(x,y)轴
小地图类:
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