Unity实现游戏伤害数字显示HUD的方法
作者:小紫苏xw 发布时间:2023-05-18 06:47:01
标签:unity,显示,数字伤害
伤害数字显示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);
}
}
}
来源:https://www.cnblogs.com/littleperilla/p/15449427.html
0
投稿
猜你喜欢
- 本文介绍了Android 实现截屏方式整理,分享给大家。希望对大家有帮助可能的需求:截自己的屏截所有的屏带导航栏截屏不带导航栏截屏截屏并编
- Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭
- 一、背景项目中肯定会遇到异步调用其他方法的场景,比如有个计算过程,需要计算很多个指标的值,但是每个指标计算的效率快慢不同,如果采用同步执行的
- 项目介绍医院管理系统,分为管理员、医生、病人三种角色;管理员主要功能包括:首页、系统管理:医生管理、患者管理、药品管理;预约管理;病史管理;
- 本文实例讲述了C#使用HtmlAgilityPack抓取糗事百科内容的方法。分享给大家供大家参考。具体实现方法如下:Console.Writ
- File类File类事java.io包中唯一代表磁盘文件本身的对象。File类定义了一些与平台无关的方法来操作文件,可以通过调用File类中
- 本文实例为大家分享了Java实现简单员工管理系统的具体代码,供大家参考,具体内容如下代码如下:import java.util.*;publ
- 新版本的xlsx是使用新的存储格式,貌似是处理过的XML。对于OpenXML我网上搜了一下,很多人没有介绍。所以我就这里推荐下,相信会成为信
- 一: Environment.StackTrace可能我们看到最多的就是catch中的e参数,里面会有一个StackTrace,然后不可否认
- 在idea中将创建的java web项目部署到Tomcat中采用的工具idea 2018.3.6 Tomcat71.先创建第一个新项目sec
- Spring 基于注解启动主要有两个Class实现注解启动AnnotationConfigApplicationContextAnnotat
- 效果图白话分析:多线程:肯定是多个线程咯断点:线程停止下载的位置续传:线程从停止下载的位置上继续下载,直到完成任务为止。核心分析:断点:当前
- 双重循环打印顶点在左上的直角三角形:public static void main(String[] args) { // TO
- 把做工程过程常用的一些代码段做个记录,下面代码是关于Java实现图片倒影的的代码,应该对大家有较大用处。 public class
- 本文实例讲述了Java实现打印二叉树所有路径的方法。分享给大家供大家参考,具体如下:问题:给一个二叉树,把所有的路径都打印出来。比如,对于下
- 前言扫雷是一个常见小游戏,那么如何用C语言实现扫雷呢?学习了二维数组之后,我们可将扫雷的网格区域存储为二维数组,从而使用C语言实现扫雷。1.
- java自定义切面增强写代码时会遇到一些有些重复机械的工作, 这个时候就可以运用切面技术来帮我们节约时间介绍如何使用自定义注解增强方法, 实
- Stream流多字段求和、汇聚实现方法利用Collectors.toMap(Function keyMapper, Function val
- mybatis 映射文件中,if标签判断字符串相等,两种方式:因为mybatis映射文件,是使用的ognl表达式,所以在判断字符串sex变量
- 实践过程效果代码public partial class Form1 : Form{ public Form1()