Unity实现游戏伤害数字显示HUD的方法

目录
  • 伤害数字显示HUD
  • Demo展示
  • HUDPopup类

伤害数字显示HUD

游戏中收到伤害掉血,会有飘动的伤害数值;

可以使用OnGUI中GUI.Label来实现;

可自定义字体,颜色,大小等;

如果需要更好看的数字特效,可以手动添加;

普通字体不够好看可以使用插件FontEditor自定义;

Demo展示

HUDPopup类

飘血数字类,创建一个空物体,将这个脚本挂上去,再将这个物体拖成预制体;

public class HUDPopup : MonoBehaviour
{
    //目标位置
    private Vector3 mTarget;
    //屏幕坐标
    private Vector3 mScreen;
    //伤害数值
    public int Value;
    //文本宽度
    public float ContentWidth;
    //文本高度
    public float ContentHeight;
    //GUI坐标
    private Vector2 mPoint;
    //销毁时间
    public float FreeTime = 1.5F;
    public Font font;
    public Color color;
    public int fontSize;
    public float speed;
    void Start ()
    {
        //获取目标位置
        mTarget = transform.position;
        //获取屏幕坐标
        mScreen = Camera.main.WorldToScreenPoint(mTarget);
        //将屏幕坐标转化为GUI坐标
        mPoint = new Vector2(mScreen.x, Screen.height - mScreen.y);
        //开启自动销毁线程
        StartCoroutine("Free");
    }  

    void Update()
    {
        //使文本在垂直方向山产生一个偏移
        transform.Translate(Vector3.up * speed * Time.deltaTime);
        //重新计算坐标
        mTarget = transform.position;
        //获取屏幕坐标
        mScreen = Camera.main.WorldToScreenPoint(mTarget);
        //将屏幕坐标转化为GUI坐标
        mPoint = new Vector2(mScreen.x, Screen.height - mScreen.y);
    }  

    void OnGUI()
    {
        //保证目标在摄像机前方
        if(mScreen.z>0)
        {
           //内部使用GUI坐标进行绘制
           GUIStyle style = new GUIStyle();
           style.fontSize = fontSize;
           style.font = font;
           style.normal.textColor = color;
           GUI.Label(new Rect(mPoint.x, mPoint.y, ContentWidth, ContentHeight), "-"+Value.ToString(),style);
        }
    }  

    IEnumerator Free()
    {
        yield return new WaitForSeconds(FreeTime);
        Destroy(this.gameObject);
    }
}  

一些自定义属性,默认Color的透明度是0,如果出现不显示,可以看看这里;

使用时,在需要有掉血数字的物体上的脚本中实例化HUDPopup,创一个HUD预制体对象,放在该物体的子节点下某个位置(一般在怪物头顶创建一个空节点,用来当HUD的父物体);

测试类代码:

public class Test : MonoBehaviour
{
    public GameObject popupDamage;
    public Transform hudPos;

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject mObject = (GameObject)Instantiate(popupDamage, hudPos.position, Quaternion.identity);
            mObject.GetComponent<HUDPopup>().Value = Random.Range(20, 40);
        }
    }
}

到此这篇关于Unity实现游戏伤害数字显示HUD的方法的文章就介绍到这了,更多相关Unity 伤害数字显示HUD内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Unity3D实现鼠标控制视角转动

    前面,学了物体的移动功能,现在来学一下C#实现鼠标控制摄像机(视角)移动. 代码如下: C#脚本(在Unity 5.5.1 下能运行): using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseView : MonoBehaviour { public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY

  • unity实现摄像头跟随

    代码很简单,这里就不多废话了,直接奉上代码 using UnityEngine; using System.Collections; public class FllowTarget : MonoBehaviour { public Transform character; //摄像机要跟随的人物 public float smoothTime = 0.01f; //摄像机平滑移动的时间 private Vector3 cameraVelocity = Vector3.zero; private

  • Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作

    获取当前键盘按键,代码如下: using UnityEngine; using System.Collections; public class GetCurrentKey : MonoBehaviour { KeyCode currentKey; void Start () { currentKey = KeyCode.Space; } void OnGUI() { if (Input.anyKeyDown) { Event e = Event.current; if (e.isKey) {

  • Unity3D中脚本的执行顺序和编译顺序

    事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图: 我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图所示,然后按照顺序将脚本绑定到对应的游戏对象上: 三条脚本的代码完全一样,只是做了一点名称上的区分: using UnityEngine;using System.Collections;public class Scring0 : MonoBehaviour{    void Awake()

  • unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android apk)

    unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android apk),总的流程分为以下6个步骤: 1.安装java_jdk 2.配置java环境变量 3.更新android的sdk 4.从Unity3d中发布出apk文件 5.创建android虚拟机并运行 6.将apk文件安装到android虚拟机中 (为方便新手,在下面对每个步骤的具体操作及可能遇到的问题详细提一下) 1.安装java_jdk 官网(www.java.com),免费,我安装的文件的名字是j

  • Unity键盘WASD实现物体移动

    本文实例为大家分享了Unity键盘WASD实现物体移动的具体代码,供大家参考,具体内容如下 1首先在场景中建立一个Capsule,将主摄像机拖到其物体下. 2.将脚本挂在Capsule物体下,WASD 控制移动方向,空格延Y轴向上移动,F延Y轴向下移动 using System.Collections; using System.Collections.Generic; using UnityEngine; public class MoveCam : MonoBehaviour { priva

  • Unity3D实现控制摄像机移动

    本文实例为大家分享了Unity3D实现控制摄像机移动的具体代码,供大家参考,具体内容如下 最近公司的几个项目开发内容基本相同,很多脚本直接复制过来就可以拼接项目.之前一直是代码爱好者,能自己敲的绝对不去复制粘贴.但是开发速度确实是被耽误了,所以接下来打算把开发中常用的脚本都发到博客上.自己需要的时候直接拿来.也希望能帮到你们. unity编辑器中按住鼠标右键,在通过控制键盘的wasdqe键可以自由控制视野. 下面就是实现操作的代码: using System.Collections; using

  • Unity实现游戏伤害数字显示HUD的方法

    目录 伤害数字显示HUD Demo展示 HUDPopup类 伤害数字显示HUD 游戏中收到伤害掉血,会有飘动的伤害数值: 可以使用OnGUI中GUI.Label来实现: 可自定义字体,颜色,大小等: 如果需要更好看的数字特效,可以手动添加: 普通字体不够好看可以使用插件FontEditor自定义: Demo展示 HUDPopup类 飘血数字类,创建一个空物体,将这个脚本挂上去,再将这个物体拖成预制体: public class HUDPopup : MonoBehaviour { //目标位置

  • Unity存储游戏数据的多种方法小结

    目录 1 PlayerPrefs: Unity自带的一种简单的键值存储系统 2 ScriptableObject: Unity中最灵活的数据管理工具 2.1 如何手动创建和修改数据文件 2.2 ScriptableObject优缺点总结 3 JSON: 轻量级的数据交换格式 3.1 序列化与反序列化 3.2 用JsonUtility对对象进行序列化和反序列化 4 XML:一种可扩展标记语言 5 三者特点总结 6 数据库:存储大量数据时使用的一种方法 1.安装SQLite插件 2.创建数据库和表

  • Unity查找游戏物体的六种方式详解

    一篇小白也能看懂的查找游戏物体的方式解析 – Unity 之 查找物体的几种方式.本文通过实际测试得出使用结论,大家进行简单记录,在使用时想不起来可以再来看看,多用几次基本就没有问题了. 一,Object.Find() Object.Find():根据名称找到游戏对象并返回它. void ObjectFind() { // 找父级 GameObject parent = GameObject.Find("GameObject"); Debug.Log("找父级物体,是否找到:

  • Unity制作游戏自定义按键详解

    目录 一.效果图 二.布局 1.场景布局 2.设置面板布局 三.脚本思路 1.KeyItem脚本 2.SetKeyPanle脚本 3.player移动脚本 一.效果图 二.布局 1.场景布局 创建一个Panel 创建三个cube,Panel地板 两个cube设置一个绿色材质,调整Scale大小让其成为柱子形状,一个cube改名为player设置一个红色材质,当作玩家(用来演示操作的),修改相机位置就可以了. 2.设置面板布局 2.1新建一个空节点名字改为SetKeyPanle,修改属性 2.2在

  • PHP实现扎金花游戏之大小比赛的方法

    本文实例讲述了PHP实现扎金花游戏之大小比赛的方法.分享给大家供大家参考.具体分析如下: 程序离不开算法,前面讨论过寻路的算法.不过,当时的示例图中,可选的路径是唯一的.我们挑选一个算法,就是说要把这个唯一的路径选出来,怎么选呢? 还记得上初中的时候经常下午放学就躲在路边扎金花来赌*钱,貌似还上瘾了,现在过年的时候还经常一起扎金花赌*钱,但运气不啥好,每次都是输啊. 今天阳光明媚,由于清明节才出去玩了,所以今天没有去哪.闲着没事就想了下怎么用程序实现金花中两幅牌的大小比较,现在把它实现了,有些方

  • python飞机大战pygame游戏之敌机出场实现方法详解

    本文实例讲述了python飞机大战pygame游戏之敌机出场实现方法.分享给大家供大家参考,具体如下: 目标 使用 定时器 添加敌机 设计 Enemy 类 01. 使用定时器添加敌机 运行 备课代码,观察 敌机的 出现规律: 游戏启动后,每隔 1 秒 会 出现一架敌机 每架敌机 向屏幕下方飞行,飞行 速度各不相同 每架敌机出现的 水平位置 也不尽相同 当敌机 从屏幕下方飞出,不会再飞回到屏幕中 1.1 定时器 在 pygame 中可以使用 pygame.time.set_timer() 来添加

  • Unity之Luaframework框架lua调用C#方法

    前言 最近,新来的同事写接口,需要知道lua怎么调用C#脚本,趁这个机会也给大家分享一下.道理我也不多少,直接上干货. 框架介绍 本项目采用luaframework+ugui,详情咨询度娘. 框架: 创建C#类 首先写个C#脚本,这个脚本里的方法是我们需要在lua中调用的,这里需要调用的方法命名为ShirlnDebug using System.Collections; using System.Collections.Generic; using UnityEngine; public cla

  • Unity中协程IEnumerator的使用方法介绍详解

    在Unity中,一般的方法都是顺序执行的,一般的方法也都是在一帧中执行完毕的,当我们所写的方法需要耗费一定时间时,便会出现帧率下降,画面卡顿的现象.当我们调用一个方法想要让一个物体缓慢消失时,除了在Update中执行相关操作外,Unity还提供了更加便利的方法,这便是协程. 在通常情况下,如果我们想要让一个物体逐渐消失,我们希望方法可以一次调用便可在程序后续执行中实现我们想要的效果. 我们希望代码可以写成如下所示: void Fade() { for (float f = 1f; f >= 0;

  • Unity实现游戏卡牌滚动效果

    最近项目中的活动面板要做来回滚动卡牌预览效果,感觉自己来写的话,也能写,但是可能会比较耗时,看到Github上有开源的项目,于是就借用了,Github的资源地址,感谢作者的分享. 本篇博客旨在告诉大家如何利用这个插件. 插件的核心在于工程中的6个脚本,以下是六个脚本的源码: DragEnhanceView.cs using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSys

  • Unity实现游戏存档框架

    最近重构了一下我的存档框架.我在这里对实现方法进行简单的解析.注意这里主要演示算法,所以,效率上并不是最佳.一个游戏中,可能有成百上千个物体需要存储,而且有几十种类型,接下来就用一个简单的例子来解释.一个很简单的例子,有一个Unit(单位)类型,有一个Inventory(背包)类型,有一个Item(道具)类型. 接下来先介绍框架中最重要的接口,ISavable,表示这个类型可以存档 public interface ISavable{ uint Id {get; set;} Type DataT

随机推荐