经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » unity » 查看文章
Unity实现游戏伤害数字显示HUD的方法
来源:jb51  时间:2021/10/25 11:25:47  对本文有异议

伤害数字显示HUD

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

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

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

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

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

Demo展示

HUDPopup类

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

  1. public class HUDPopup : MonoBehaviour
  2. {
  3. //目标位置
  4. private Vector3 mTarget;
  5. //屏幕坐标
  6. private Vector3 mScreen;
  7. //伤害数值
  8. public int Value;
  9. //文本宽度
  10. public float ContentWidth;
  11. //文本高度
  12. public float ContentHeight;
  13. //GUI坐标
  14. private Vector2 mPoint;
  15. //销毁时间
  16. public float FreeTime = 1.5F;
  17. public Font font;
  18. public Color color;
  19. public int fontSize;
  20. public float speed;
  21. void Start ()
  22. {
  23. //获取目标位置
  24. mTarget = transform.position;
  25. //获取屏幕坐标
  26. mScreen = Camera.main.WorldToScreenPoint(mTarget);
  27. //将屏幕坐标转化为GUI坐标
  28. mPoint = new Vector2(mScreen.x, Screen.height - mScreen.y);
  29. //开启自动销毁线程
  30. StartCoroutine("Free");
  31. }
  32. void Update()
  33. {
  34. //使文本在垂直方向山产生一个偏移
  35. transform.Translate(Vector3.up * speed * Time.deltaTime);
  36. //重新计算坐标
  37. mTarget = transform.position;
  38. //获取屏幕坐标
  39. mScreen = Camera.main.WorldToScreenPoint(mTarget);
  40. //将屏幕坐标转化为GUI坐标
  41. mPoint = new Vector2(mScreen.x, Screen.height - mScreen.y);
  42. }
  43. void OnGUI()
  44. {
  45. //保证目标在摄像机前方
  46. if(mScreen.z>0)
  47. {
  48. //内部使用GUI坐标进行绘制
  49. GUIStyle style = new GUIStyle();
  50. style.fontSize = fontSize;
  51. style.font = font;
  52. style.normal.textColor = color;
  53. GUI.Label(new Rect(mPoint.x, mPoint.y, ContentWidth, ContentHeight), "-"+Value.ToString(),style);
  54. }
  55. }
  56. IEnumerator Free()
  57. {
  58. yield return new WaitForSeconds(FreeTime);
  59. Destroy(this.gameObject);
  60. }
  61. }

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

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

测试类代码:

  1. public class Test : MonoBehaviour
  2. {
  3. public GameObject popupDamage;
  4. public Transform hudPos;
  5. private void Update()
  6. {
  7. if (Input.GetMouseButtonDown(0))
  8. {
  9. GameObject mObject = (GameObject)Instantiate(popupDamage, hudPos.position, Quaternion.identity);
  10. mObject.GetComponent<HUDPopup>().Value = Random.Range(20, 40);
  11. }
  12. }
  13. }

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号