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;//让生成的伤害永远面对屏幕,不然是反方向显示 } } }
时间若流水,恍惚间逝去