伤害数字显示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 伤害数字显示HUD内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!