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

作者:小紫苏xw 时间:2023-05-18 06:47:01 

伤害数字显示HUD

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

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

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

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

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

Demo展示

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

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,如果出现不显示,可以看看这里;

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

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

Unity实现游戏伤害数字显示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
  • asp之家 软件编程 m.aspxhome.com