Unity 简单的伤害数字显示

2023-11-10

Unity 伤害数字显示

参考链接https://blog.csdn.net/book_longssl/article/details/39610775?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-7&spm=1001.2101.3001.4242

试着做了下伤害数字的显示 效果如下
在这里插入图片描述

首先是新建一个c#脚本

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

public class DamageGUI : MonoBehaviour
{
    private Vector3 mTarget;
    private Vector3 mScreen;
    public float value;

    public float ContentWidth = 100;
    public float ContentHeight = 50;

    private Vector2 mPoint; //GUI坐标
    public float DestoryTime = 2.0f; //伤害数字消失时间
    // Start is called before the first frame update
    void Start()
    {
        mTarget = transform.position; //获取目标位置
        mScreen = Camera.main.WorldToScreenPoint(mTarget); //转化为屏幕位置
        mPoint = new Vector2(mScreen.x, Screen.height - mScreen.y);
        StartCoroutine("Free"); //开启一个协程
    }

    // Update is called once per frame
    void Update()
    {
        transform.Translate(Vector3.up * 0.5f * Time.deltaTime); //伤害数字上移效果
        mTarget = transform.position;  
        mScreen = Camera.main.WorldToScreenPoint(mTarget);
        mPoint = new Vector2(mScreen.x, Screen.height - mScreen.y);//实时变化位置
    }

    void OnGUI()
    {
        if (mScreen.z > 0) //伤害数字显示
        {
            GUI.Label(new Rect(mPoint.x, mPoint.y, ContentWidth, ContentHeight), value.ToString());
        }

    }
    IEnumerator Free()  //协程,伤害数字时间一到消失
    {
        yield return new WaitForSeconds(DestoryTime);
        Destroy(this.gameObject);
    }
}

随意新建一个空的物体
取名为DamageText,插入前面写好的DamageGUI脚本
并设为预制体,放入Resources文件夹
在这里插入图片描述

随后在人物的头顶位置Create Empty Object
我这里是新建了一个statusBar 以后也可以用于制作例如眩晕、减速等
在这里插入图片描述
随后在之前写好的战斗模块中调用这个DamageText预制体

public GameObject DamageGUI;
 void Start()
    {
        DamageGUI = Resources.Load("DamageText") as GameObject;
    }
public void AddHp(float value) {
        GameObject DamageText = (GameObject)Instantiate(DamageGUI, transform.DeepFind("statusBar").gameObject.transform.position, Quaternion.identity);
        DamageText.GetComponent<DamageGUI>().value = value;
    }

调用这个预制体的脚本位于PlayerHandle这一层中
在这里插入图片描述

在这里插入图片描述
而初始的Damage GUI是空的,需要将预制体拖入,但为了不每次新建角色怪物时重新拖入,这里我使用了

DamageGUI = Resources.Load("DamageText") as GameObject;

从Resources资源文件夹获取之前放入的预制体,运行后就可以自动获取

同时生成伤害数字的起始位置也是向下搜索

transform.DeepFind("statusBar").gameObject.transform.position

DeepFind的代码如下

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

public static class TransformHelpers 
{
    public static Transform DeepFind(this Transform parent, string targetName) {
        Transform tempTrans = null;
        foreach (Transform child in parent)
        {
            if (child.name == targetName)
            {
                return child;
            }
            else { 
                tempTrans = DeepFind(child, targetName);
                if (tempTrans != null) {
                    return tempTrans;
                }
            }
        }
        return tempTrans;
    }
}

简单的白字伤害数字就此完成,此后还需添加样式,例如更改伤害数字的大小,应该是从跳出时最大,逐渐变小,同时如果是暴击,得变个颜色,而且随着时间渐渐透明等,留待以后完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

随机推荐

  • C# Winform 界面中各控件随着窗口大小变化

    在做一项工程中 由于不确定目标平台的分辨率 而正常使用要求铺满整个屏幕 所以界面中的各个控件必须能够适应窗口的变化 首先想到的就是控件的百分比布局 但是再尝试写了几个控件的Location和Size之后 发现这真是一项浩大的工程 方法是在太
  • Java 实现异步的方法

    当涉及到在Java中实现异步操作时 有多种方法可供选择 下面是一些常见的实现方式以及相应的Java代码示例 使用线程 Thread Thread thread new Thread gt 异步操作的代码逻辑 thread start 使用E
  • 如何一句话“暴击”程序员,网友:哭了!

    俗话说得好 每个程序猿 都有一颗 坚强的心 据说有几句话 一旦对程序猿开口 会立马激怒他 外加100点暴击 如下 1 下班了 故意从程序员边上飘过 淡定的来一句 哟 还在改 bug 呢 看着程序猿难过的眼神 再加一句 加油 我先下班了啦 2
  • 红黑树

    1 红黑二叉树详解及理论分析 http blog csdn net kartorz article details 8865997 查找 一 史上最简单清晰的红黑树讲解 http blog csdn net yang yulei artic
  • C语言版数据结构- C语言实现二叉树,含详细的源代码

    BinaryTree h 头文件 include
  • vivado synthesis fail,没有报错可能原因

    不排除代码问题 查一下新增代码的语法 实例化两个子模块 端口都不对 也出现了synthesis fail 且没有报错
  • UDP通信控制端通过事件发送udp

    using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviour UDPClient uD
  • (最详细)红米手机5 Plus的USB调试模式在哪里开启的方法

    每当我们使用安卓手机通过数据线连接上pc的时候 或者使用的有些软件比如我们团队营销团队每当使用的软件引号精灵 以前使用的老版本就需要开启USB开发者调试模式下使用 现每当新版本不需要了 如果手机没有开启USB开发者调试模式 pc则没办法成功
  • matlab 取矩阵上三角元素,MATLAB triu():提取上三角矩阵

    triu 函数是 中提取上三角矩阵的函数 其调用形式如下 U triu X 或者 U triu X k 其中 X 是待求解的数组 前者函数返回的结果 为数组 X 的主对角线及其右上方的数 且其余位置上的元素为 0 后者函数返回的结果取决于
  • es倒排索引深入解读

    文章目录 一 Lucene 二 倒排索引算法 2 1 Posting List压缩算法 2 1 1 FOR 2 1 2 RoaringBitmap压缩 2 3 FST压缩算法 2 3 1 trie前缀树原理 2 3 2 FST构建过程 NF
  • 用tornado ,Supervisord ,nginx架网站

    supervisor 安装配置 supervisor 是一个守护进程管理软件 是把linux上众多的守护进行集中在supervisor 进行统一的管理 安装 shell gt sudo apt get install supervisor
  • 2023前端面试题-面试宝典-总结心得(附答案)持续更新中~~

    目录 一 HTML篇 1 HTML5 新增那些标签 2 列举常见的块元素和行内元素以及行内块元素 它们有何不同 3 简述 readyonly 与 disabled 的区别 4 HTML5头部为什么只需要写标签 5 HTML5 存储类型有什么
  • Linux上安装python3

    记录如何在linux上安装python3及升级pip 文章目录 1 准备工作 1 1 安装python3的依赖 1 2 下载python3安装包 2 安装python3 2 1 配置安装路径 2 2 编译安装python3 2 3 添加软链
  • python numpy库安装-Python3 安装 numpy 科学库

    root Singapore numpy wget https pypi python org packages ee 66 7c2690141c520db08b6a6f852fa768f421b0b50683b7bbcd88ef51f33
  • STM32F10X串口通信配置(USART1+USART2+USART3+UART4)

    转载自 https www cnblogs com pertor p 9488446 html 一 串口一的配置 初始化 中断配置 中断接收函数 Copyright Version Author Date 2017 11 3 Descrip
  • 【Android开发】使用Bottom Navigation Activity去掉顶部栏(标题栏)

    Android开发 使用Bottom Navigation Activity去掉顶部栏 标题栏 在使用android自带的模板Botton Navigation Activity后 页面顶部会有一个标题栏 如下图 解决办法 在MainAct
  • C++实现两个单向链表的合并

    本文主要是关于如何实现两个单向链表的合并的 即使图1中的链表rb接在链表ra之后 实现的代码见函数ListCombine SLNode head1 SLNode head2 的代码块 主要的步骤是 1 对链表ra进行遍历 当遍历至尾结点 p
  • 【GIS开发】osgEarth依赖库PROJ(Python)

    文章目录 1 OSGeo PROJ C 1 1 编译sqlite3 1 2 编译libtiff 1 3 编译openssl 1 4 编译curl 1 5 编译PROJ9 2 pyproj python库 2 1 概述 2 2 安装 2 3
  • 微信小程序真机一键清空搜索框按钮失效的问题

    今天开发的时候在真机上突然发现一个小问题 真机搜索完毕后点击删除按钮没办法一键清空搜索框内的内容 本来以为好解决 结果试了好几种方式都没有完美解决掉 最后经过多次尝试发现关闭弹出的小键盘就可以点到删除按钮 既然我控制input及删除按钮没用
  • Unity 简单的伤害数字显示

    Unity 伤害数字显示 参考链接https blog csdn net book longssl article details 39610775 utm medium distribute pc relevant none task b