using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class HudTextEx : UnitySingleton<HudTextEx> { protected class HudPanel { /// <summary> /// 对准相机 /// </summary> public UIFollowTarget ut; /// <summary> /// hudText 显示的本身 /// </summary> public GameObject hudText; public HUDText mText; public HudPanel(UIFollowTarget ut, GameObject hudText) { this.ut = ut; this.hudText = hudText; mText = hudText.GetComponentInChildren<HUDText>(); } } public GameObject prefab; /// <summary> ///key是物体实例化 id /// </summary> Dictionary<int, HudPanel> dict =new Dictionary<int, HudPanel>(); // Use this for initialization HudPanel CreatPanel () { //每个角色 拥有一个 hudText panel var child = NGUITools.AddChild(NGUIRoot.Instance.gameObject, prefab); var ut = child.AddComponent<UIFollowTarget>(); ut.gameCamera = NGUIRoot._3dCamera; ut.uiCamera = NGUIRoot._2dCamera; return new HudPanel(ut,child); } /// <summary> /// 显示加血 /// </summary> /// <param name="tra"></param> /// <param name="hp"></param> public void CreatShowAddHp(Transform tra,int hp) { HudPanel hup = null; if (dict.ContainsKey(tra.GetInstanceID()) == false) { hup = CreatPanel(); dict.Add(tra.GetInstanceID(), hup); } else { hup = dict[tra.GetInstanceID()]; } // Make the UI follow the target hup.ut.target = tra; hup.mText.Add(hp, Color.green, 0f); } /// <summary> /// 显示伤害 /// </summary> /// <param name="tra"></param> /// <param name="num"></param> public void CreatShowDamage(Transform tra, int num) { HudPanel hup = null; if (dict.ContainsKey(tra.GetInstanceID()) == false) { hup = CreatPanel(); dict.Add(tra.GetInstanceID(), hup); } else { hup = dict[tra.GetInstanceID()]; } // Make the UI follow the target hup.ut.target = tra; num = num < 0 ? num : -num; hup.mText.Add(num, Color.red, 0f); } /// <summary> /// 如果角色死亡,移除这个面板 /// </summary> void UpdateCheak() { if(dict.Count <0) return; ///保存要删除的物体key List<int> list =new List<int>(); foreach (var item in dict) { if (item.Value.ut.target == null) { list.Add(item.Key); } } foreach (var item in list) { Destroy(dict[item].hudText); dict[item].hudText = null; dict.Remove(item); } } private float timer=0; // Update is called once per frame void FixedUpdate() { if (dict.Count < 0) return; //如果角色死亡,移除这个面板,1秒检测一次 if (timer < 1f) { timer += Time.deltaTime; } else { timer = 0; UpdateCheak(); } } }
Unity3d 中HudText插件使用 伤害数字显示
猜你喜欢
转载自blog.csdn.net/u013628121/article/details/80042205
今日推荐
周排行