Unity——伤害数字显示HUD
伤害数字显示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 GUI制作HUD
若知其所以然,自然知其然. HUD是指平视显示器,就是套在脸上,和你的眼睛固定在一起,HUD的意思就是界面咯,一般我们说HUD特指把3D空间中的界面的某些信息(比如血条,伤害之类)的贴在界面上,对应3 ...
- NGUI:HUD Text(头顶伤害漂浮文字)
HUD Text 很早之前就有闻于NGUI中的HUD Text插件,今天得以尝试,看了会儿官方的文档,楞是没给看明白,官方的ReadMe.txt写的使用方法如下: 官网Usage 1. Attach ...
- Unity游戏中关于伤害范围的计算
1.纯数学计算 范围计算 + 方向计算: 先将不在伤害范围的敌人排除掉,再计算处于伤害范围并且角度正确的敌人. 以上的计算是以人物的中心来计算的, 所以这中方式就有些局限性了,比如:一个四足怪物,只有 ...
- Unity UGUI HUD 怪物血条实现
首先做一个血条,创建一个名为Follow3DObject的脚本添加到血条控件上. Follow3DObject.cs的代码如下: using UnityEngine; using System.Col ...
- Unity《ATD》塔防RPG类3D游戏架构设计(一)
目录 <ATD> 游戏简介 <ATD> 整体结构 <ATD> 游戏机制 Buff机制 Skill机制(技能机制) 仇恨机制 <ATD> 游戏模型 策划案 ...
- Unity——技能系统(三)
Unity技能系统(三) Unity技能系统(一) Unity技能系统(二) Demo展示 六.Buff系统 buff分为增益和减益buff,应该区分开来: /// <summary> / ...
- Unity 最佳实践
转帖:http://www.glenstevens.ca/unity3d-best-practices/ 另外可以参考:http://devmag.org.za/2012/07/12/50-tips- ...
- unity初始篇 选择游戏对象
之前两任社长都在一直强调要写博客,一直没有写过,现在我已经踏上了博客的道路! 首先声明:本人才疏学浅,对unity认识不深,有错误的地方欢迎大家指出,在此谢过! 本文所说的选择对象,是指在游戏过程中动 ...
- GJM : 基于Actor模式的c#网络游戏服务器的实现和Unity游戏客户端的连接 [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
随机推荐
- RabbitMQ之消息模式2
消费端限流 什么是消费端的限流? 假设一个场景,首先,我们RabbitMQ服务器有上万条未处理的消息,我们随便打开一个消费者客户端,会出现下面情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法 ...
- samba网络共享
1.sanma简介 2. samba安装 #更新源 opkg update #搜索软件包,查看版本 opkg list | grep "samba" #根据查询的版本安装服务器和l ...
- 如何实现自定义sk_buff数据包并提交协议栈
目录 一.自定义数据包的封装流程 1. 分配skb 2.初始定位(skb_reserve) 3.拷贝数据(skb_push / skb_pull / skb_put / ) 4.设置传输层头部 5.设 ...
- linux清空文件
https://www.cnblogs.com/mrwang1101/p/6166326.html
- go中语句为什么不用加分号;结束
不用人加 编译的时候自动加了分号; 编译器工作原理 首先,在一行中,寻找成对的符号,比如一对字符串的引号.一对圆括号,一对大括号 上述任务完成后,在一行中没有其他成对的标示,然后就在行尾追加分号; 所 ...
- Devexpress gridcontrol设置列样式
<dxg:GridControl.Columns><dxg:GridColumn Header="排名" FieldName="UserRank&quo ...
- webgl 图像处理 加速计算
webgl 图像处理 webgl 不仅仅可以用来进行图形可视化, 它还能进行图像处理 图像处理1---数据传输 webgl 进行图形处理的第一步: 传输数据到 GPU 下图为传输点数据到 GPU 并进 ...
- 机器学习——最优化问题:拉格朗日乘子法、KKT条件以及对偶问题
1 前言 拉格朗日乘子法(Lagrange Multiplier) 和 KKT(Karush-Kuhn-Tucker) 条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等 ...
- 建立 F103C8T6 HAL库 Makefile FreeRTOS 工程
F103C8T6 HAL库 Makefile FreeRTOS 工程模板 环境 该工程的开发平台为 ARM-GCC 工具链和 Make > arm-none-eabi-gcc -v gcc ve ...
- 织梦 arclist调用副栏目内容解决办法
1 打开include/taglib/arclist.lib.php,找到296行: if($CrossID=='') $orwheres[] = ' arc.typeid IN ('.GetSonI ...