Unity NGUI中人物头顶名称、血条绘制及跟随

步骤:1.在NGUI中制作血条和名字
2.达到血条在角色头顶上方显示的效果
3.在场景开始时,由角色创建自己的血条
实现:1.创建一个在容纳血条的父物体(创建这个因为一个场景中往往有很多角色拥有血条,这样做是方便管理)
在UI中创建一个容器(NGUI->Create->Widget),然后在Container下创建一个空物体命名为RoleHeadBarRoot
2.制作血条
创建一个空物体,重命名为RoleHeadBar,再在RoleHeadBar下创建一个UILabel,用于显示角色昵称
在这里插入图片描述

再创建血条,打开NGUI的Widget Tools(NGUI->Open->Widget Wizard),选择创建类型为Progress Bar,选择血条的背景以及血条的物品,确认父物体为RoleHeadBar之后创建
在这里插入图片描述

修改血条颜色,背景透明度,以及血条位置之后的效果
在这里插入图片描述

步骤二:血条显示的核心代码
第一行:如果角色,主相机,UI相机有一个为空,血条就无法显示,直接返回;
第二行:m_Target.position为角色头顶的位置,即将血条要显示的位置转换成相机中的观看的位置,第三个方向z用于表示目标点与相机之间的距离
第三行:因为血条是属于UI层级,主摄像机无法观察到,所以需要将视口坐标转化成UI摄像机能看到的世界坐标。

在这里插入图片描述

主代码如下,初始化函数,用于角色创建血条时调用。上弹伤害文字需要用到HUDText插件,比较简单,在RoleHeadBar下添加HUDText脚本,就可以使用,有兴趣的小伙伴可以自行了解下,这里不详细解释

using UnityEngine;
using System.Collections;

public class RoleHeadBarCtrl : MonoBehaviour
{
    /// <summary>
    /// 昵称
    /// </summary>
    [SerializeField]
    private UILabel lblNickName;

    /// <summary>
    /// 飘血显示
    /// </summary>
    [SerializeField]
    private HUDText hudText;

    /// <summary>
    /// 血条
    /// </summary>
    [SerializeField]
    private UISlider pbHP;

    /// <summary>
    /// 对齐的目标点
    /// </summary>
    private Transform m_Target;

    void Update()
    {
        if (Camera.main == null || UICamera.mainCamera == null || m_Target==null) return;

        //世界坐标点转换成视口坐标
        Vector3 pos = Camera.main.WorldToViewportPoint(m_Target.position);

        //转换成UI摄像机的世界坐标
        Vector3 uiPos = UICamera.mainCamera.ViewportToWorldPoint(pos);

        gameObject.transform.position = uiPos;
    }

    /// <summary>
    /// 角色顶部条初始化
    /// </summary>
    /// <param name="target"></param>
    /// <param name="nickName"></param>
    /// <param name="isShowHPBar">是否显示血条</param>
    public void Init(Transform target,string nickName,bool isShowHPBar=false)
    {
        m_Target = target;

        lblNickName.text = nickName;

        //只有小怪显示血条 主角不显示
        NGUITools.SetActive(pbHP.gameObject, isShowHPBar);
        
    }

    /// <summary>
    /// 上弹伤害文字
    /// </summary>
    /// <param name="hurtValue"></param>
    public void Hurt(int hurtValue,float pbHPValue)
    {
        hudText.Add(string.Format("-{0}", hurtValue), Color.red, 0.1f);
        pbHP.value = pbHPValue;
        //Debug.Log("MonsterHP" + pbHP.value);
    }
}

步骤三:角色创建自己的血条
1.将血条添加到Resources文件夹下作为预制体。
2.添加RoleHeadBarRoot一个脚本,并定义为单例,方便角色找到血条的父物体

   public class RoleHeadBarRoot : MonoBehaviour
    {
        public static RoleHeadBarRoot Instance;
        void Awake()
        {
            Instance = this;
        }
    	
    }

3.在角色脚本中初始化血条

    /// <summary>
    /// 初始化头顶条
    /// </summary>
    private void InitHeadBar()
    {
        if (RoleHeadBarRoot.Instance == null) return;
        if (CurrRoleInfo == null) return;
        if (m_HeadBarPos == null) return;
        //克隆预设
        m_HeadBar = Resources.Load("RoleHeadBar");
        m_HeadBar.transform.parent = RoleHeadBarRoot.Instance.transform;
        m_HeadBar.transform.localScale = Vector3.one;
        roleHeadBarCtrl = m_HeadBar.GetComponent<RoleHeadBarCtrl>();

        //给预设赋值 判断当前角色是否为主角 为主角不现实血条 怪物显示血条
        roleHeadBarCtrl.Init(m_HeadBarPos, CurrRoleInfo.NickName, isShowHPBar: (CurrRoleType == RoleType.MainPlayer ? false : true));
    }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值