HpbarTip.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using DG;
  6. using DG.Tweening;
  7. /// <summary>
  8. /// 描述:
  9. /// 作者:WJ
  10. /// </summary>
  11. public class HpbarTip : MonoBehaviour
  12. {
  13. public enum HpTweenType
  14. {
  15. Default, // 默认的抛物线 普通伤害
  16. High, // 高抛物线 速度快 弱点伤害
  17. Up, // 向上的 暴击 向上消失
  18. Down, // 向下的 抵抗 向下消失
  19. }
  20. /// <summary>
  21. /// 角色
  22. /// </summary>
  23. private Role mRole = null;
  24. /// <summary>
  25. /// 文字
  26. /// </summary>
  27. private Text mText = null;
  28. /// <summary>
  29. /// 自身Transform
  30. /// </summary>
  31. private RectTransform mRectTransform = null;
  32. /// <summary>
  33. /// 类型
  34. /// </summary>
  35. private int mType = 0;
  36. /// <summary>
  37. ///
  38. /// </summary>
  39. private Camera mUICamera = null;
  40. /// <summary>
  41. /// 父节点RectTransform
  42. /// </summary>
  43. private RectTransform mRootRectTransform = null;
  44. /// <summary>
  45. /// 颜色
  46. /// </summary>
  47. private Color mColor;
  48. /// <summary>
  49. /// 初始化
  50. /// </summary>
  51. public void Init(RectTransform rect, Role role, int val, HpTweenType htType, Color color, float liveTime = 1.0f)
  52. {
  53. mRootRectTransform = rect;
  54. mRole = role;
  55. mText = transform.GetComponentInChildren<Text>();
  56. mRectTransform = transform as RectTransform;
  57. mColor = color;
  58. mText.color = color;
  59. mText.text = val.ToString();
  60. mText.rectTransform.localScale = Vector3.one;
  61. mRectTransform.anchoredPosition = World2UI(mRole.transform.position + Vector3.up * 2) + Vector2.right * mText.preferredWidth * 0.5f;
  62. TweenFuncitonByType(htType);
  63. Destroy(gameObject, liveTime);
  64. }
  65. /// <summary>
  66. /// 更新
  67. /// </summary>
  68. private void FixedUpdate()
  69. {
  70. //if (mText != null && mRectTransform != null)
  71. //{
  72. // mColor.a -= Time.deltaTime * 0.33f;
  73. // mText.color = mColor;
  74. // mRectTransform.anchoredPosition3D += Vector3.up * Time.deltaTime * Screen.height * 0.2f;
  75. //}
  76. }
  77. private void TweenFuncitonByType(HpTweenType htType)
  78. {
  79. Sequence s = DOTween.Sequence();
  80. switch (htType)
  81. {
  82. case HpTweenType.Default:
  83. mText.rectTransform.DOScale(1, 1.0f);
  84. s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D + Vector3.up * (Screen.height / 10), 0.3f).SetEase(Ease.OutCirc));
  85. s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D - Vector3.up * (Screen.height / 4), 0.7f).SetEase(Ease.Linear));
  86. s.Insert(0.5f, mText.DOColor(new Color(mColor.r, mColor.g, mColor.b, 0), 0.5f).SetEase(Ease.OutCirc));
  87. s.PlayForward();
  88. break;
  89. case HpTweenType.High:
  90. mText.rectTransform.DOScale(1.5f, 0.2f);
  91. s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D + Vector3.up * (Screen.height / 5), 0.3f).SetEase(Ease.OutCirc));
  92. s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D - Vector3.up * (Screen.height / 3), 0.7f).SetEase(Ease.Linear));
  93. s.Insert(0.5f, mText.DOColor(new Color(mColor.r, mColor.g, mColor.b, 0), 0.5f).SetEase(Ease.OutCirc));
  94. s.PlayForward();
  95. break;
  96. case HpTweenType.Up:
  97. mText.rectTransform.DOScale(2f, 0.3f);
  98. s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D + Vector3.up * (Screen.height / 5), 1));
  99. s.Insert(0.5f, mText.DOColor(new Color(mColor.r, mColor.g, mColor.b, 0), 0.5f).SetEase(Ease.OutCirc));
  100. break;
  101. case HpTweenType.Down:
  102. mText.rectTransform.DOScale(1.3f, 0.3f);
  103. s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D - Vector3.up * (Screen.height / 3), 1));
  104. s.Insert(0.5f, mText.DOColor(new Color(mColor.r, mColor.g, mColor.b, 0), 0.5f).SetEase(Ease.OutCirc));
  105. break;
  106. }
  107. }
  108. /// <summary>
  109. /// 世界坐标转成UI坐标
  110. /// </summary>
  111. /// <param name="wpos">世界坐标</param>
  112. /// <returns>UI坐标</returns>
  113. public Vector2 World2UI(Vector3 wpos)
  114. {
  115. if(Camera.main == null)
  116. {
  117. return Vector2.zero;
  118. }
  119. //世界坐标 -> ViewPort坐标
  120. Vector2 viewPos = Camera.main.WorldToViewportPoint(wpos);
  121. //ViewPort坐标 -> UGUI坐标 
  122. return new Vector2(mRootRectTransform.rect.width * viewPos.x, mRootRectTransform.rect.height * viewPos.y);
  123. }
  124. }