unity 伤害值显示(飘字)效果

一:创建伤害预制件

①导入TextMeshPro插件,如果是第一次导入,以下两个都需要导入

 ②将TextMeshPro中的Canvas调整为世界模式,并将主摄像机推入

伤害预制件内部结构为:

 ③调整TMP(text)为合适的大小

调整好后可以放到物体上面的坐标看看大小

 

 ④将伤害拖入Assets中变成预制件

 

 

 二:制作伤害动画

①打开动画面板

 ②点击伤害预制件中的TMP(Text)后添加动画

 

③保存动画位置

 

④录制动画

点击录制按钮,开启录制,为红色是表示正在录制

 ⑤在30帧时操作,修改Text(TMP)Y轴坐标,也就是向上移动了,修改缩放比例为1.5

 ⑥60帧时操作,将Y轴修改为10,缩放比例修改为2

然后结束录制即可,当然你也可以自由发挥想象力

再点一下红色按钮即可结束录制

 查看效果

 如果显示出来位置有点高,则调整动画中的Y轴0 30 60帧率的高度即可

 

三:代码调用

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

using TMPro;

public class test : MonoBehaviour
{
   Transform cam;
   public GameObject damagePrefab;//伤害预制件
   TextMeshProUGUI tmp;//伤害显示文本对象
   public Transform damageHitPos;//显示伤害对象的位置
   public Transform damageClone;
    void Start()
    {   
        //找组件
        cam = Camera.main.transform;
        tmp = damagePrefab.transform.GetChild(0).GetChild(0).GetComponent<TextMeshProUGUI>();
    }

    void Update()
    {
        System.Random ran = new System.Random();
        int ranNum = ran.Next(1, 99);

        if (Input.GetMouseButtonDown(0))
            ShowDamageOnClicked(ranNum);
    }

    public void ShowDamageOnClicked(int damage)
    {
        damageClone = Instantiate(damagePrefab, damageHitPos).transform;//生成预制件
        if(damageClone!=null){
            Destroy(damageClone.gameObject,1f);//删除生成的伤害克隆体
        }
        tmp.text =  $"- {damage}";//为显示的文本赋值
    }

    private void LateUpdate() {
        if(damageClone!=null){
            damageClone.position = damageHitPos.position;//位置跟随
            damageClone.forward = cam.forward;//让生成的伤害永远面对屏幕,不然是反方向显示
        }
    }
}
posted @ 2022-11-27 09:01  伊凡晴天  阅读(2259)  评论(0编辑  收藏  举报