Unity3d 中HudText插件使用 伤害数字显示

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();
        }
	}
}



猜你喜欢

转载自blog.csdn.net/u013628121/article/details/80042205