【Unity】UGUI实现伤害数字显示效果
实现效果

 

1、 创建Canvas

         在模型创建一个Canvas作为子物体,Canvas放置到模型的上方并调整到合适大小

         设置Canvas的渲染方式为World Space

 

2、创建文字预制体

在Canvas创建一个Text文本,设置字体的大小和颜色后拖到资源文件夹作为预制体

 

3、写脚本控制文字的生成和动画效果

在文字预制体HUD上新建一个HUD脚本,代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 控制伤害显示
/// </summary>
public class HUD : MonoBehaviour
{
    /// <summary>
    /// 滚动速度
    /// </summary>
    private float speed = 1.5f;

    /// <summary>
    /// 计时器
    /// </summary>
    private float timer = 0f;

    /// <summary>
    /// 销毁时间
    /// </summary>
    private float time = 0.8f;

    private void Update()
    {
        Scroll();
    }

    /// <summary>
    /// 冒泡效果
    /// </summary>
    private void Scroll()
    {
        //字体滚动
        this.transform.Translate(Vector3.up * speed * Time.deltaTime);
        timer += Time.deltaTime;
        //字体缩小
        this.GetComponent<Text>().fontSize--;
        //字体渐变透明
        this.GetComponent<Text>().color = new Color(1,0,0,1 - timer);
        Destroy(gameObject,time);
    }

}

在Canvas上新建一个脚本HudText,代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 控制伤害效果的生成,附在Canvas上
/// </summary>
public class HudText : MonoBehaviour
{
    /// <summary>
    /// 文字预制体
    /// </summary>
    public GameObject hudText;

    private void Update()
    {
        Rotation();
    }

    /// <summary>
    /// 生成伤害文字
    /// </summary>
    public void HUD(int damage)
    {
        GameObject hud = Instantiate(hudText, transform)as GameObject;
        hud.GetComponent<Text>().text = "-" + damage.ToString();
    }

    /// <summary>
    /// 画布始终朝向摄像机
    /// </summary>
    void Rotation()
    {
        this.transform.LookAt(Camera.main.transform);
    }
}

 

使用方法

1、把HUD脚本添加到文字预制体上

2、把HudText脚本添加到Canvas上,文字预制体拖到脚本中的Hud Text字段

3、调用Hud Text脚本的HUD方法,参数为伤害数值

posted on 2019-02-09 20:47  real-道森  阅读(402)  评论(0)    收藏  举报