Unity实现游戏伤害数字显示HUD的方法
作者:小紫苏xw 时间:2023-05-18 06:47:01
伤害数字显示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
标签:unity,显示,数字伤害
0
投稿
猜你喜欢
ServletWebServerApplicationContext创建Web容器Tomcat示例
2023-10-12 12:28:33
C#微信公众平台开发之access_token的获取存储与更新
2023-12-16 06:12:04
Spring创建Bean的6种方式详解
2022-07-18 19:10:13
VS2010中lib与dll文件的生成与使用方法
2023-01-23 11:32:50
Java抽象类的概念讲解
2023-11-04 13:40:35
C#实现对AES加密和解密的方法
2021-07-27 16:34:24
深入理解Android 5.0中的Toolbar
2022-08-28 02:26:39
通过Mybatis实现单表内一对多的数据展示示例代码
2021-12-20 12:34:31
Java使用substring()截取(提取)子字符串
2023-09-29 17:02:04
Java基于解释器模式实现定义一种简单的语言功能示例
2021-06-18 15:53:42
轻松学习C#的方法
2023-06-21 13:22:32
Java实现上传文件图片到指定服务器目录
2023-06-28 00:23:32
C#创建压缩文件的实现代码
2022-07-28 23:55:04
Android中简单的电话管理与短信管理App编写实例
2021-10-11 13:45:50
android操作XML的几种方法总结
2021-08-10 06:06:16
一篇文章带你深入了解javaIO基础
2022-10-22 21:43:05
Android自定义View实现通讯录字母索引(仿微信通讯录)
2023-05-14 04:34:22
Android RecyclerView使用GridLayoutManager间距设置的方法
2023-03-20 07:32:44
解决java.lang.ClassCastException的java类型转换异常的问题
2023-11-29 04:34:10
Unity3D实现分页系统
2022-06-28 22:53:37