DamageNumberSprite.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using DamageNumbersPro;
  4. namespace DamageNumbersPro
  5. {
  6. /// <summary>
  7. /// Attach this script to custom images or sprite renderers in your damage number prefab.
  8. /// It will handle fading them in and out with the popup.
  9. ///
  10. /// You can also use Text Mesh Pro sprites instead.
  11. /// </summary>
  12. public class DamageNumberSprite : MonoBehaviour
  13. {
  14. [Header("Size:")]
  15. public bool matchTextSize = false;
  16. public Vector2 sizePadding = new Vector2(0.3f, 0.2f);
  17. public Vector2 sizeFactor = new Vector2(1f, 1f);
  18. void Start()
  19. {
  20. // Get damage number
  21. DamageNumber damageNumber = GetComponentInParent<DamageNumber>();
  22. // Fade graphic or image
  23. Graphic graphic = GetComponent<Graphic>();
  24. if (graphic != null)
  25. {
  26. // Update color
  27. Color color = graphic.color;
  28. float originalAlpha = graphic.color.a;
  29. damageNumber.OnUpdateFade += (alpha) =>
  30. {
  31. graphic.color = new Color(color.r, color.g, color.b, originalAlpha * alpha);
  32. };
  33. // Update size
  34. if (matchTextSize)
  35. {
  36. RectTransform rectTransform = graphic.rectTransform;
  37. damageNumber.OnUpdateText += () =>
  38. {
  39. UpdateSize(damageNumber, rectTransform);
  40. };
  41. }
  42. }
  43. else
  44. {
  45. // Fade sprite renderer
  46. SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
  47. if (spriteRenderer != null)
  48. {
  49. // Update color
  50. Color color = spriteRenderer.color;
  51. float originalAlpha = spriteRenderer.color.a;
  52. damageNumber.OnUpdateFade += (alpha) =>
  53. {
  54. spriteRenderer.color = new Color(color.r, color.g, color.b, originalAlpha * alpha);
  55. };
  56. // Update size
  57. if (matchTextSize)
  58. {
  59. damageNumber.OnUpdateText += () =>
  60. {
  61. UpdateSize(damageNumber, spriteRenderer);
  62. };
  63. }
  64. }
  65. }
  66. }
  67. /// <summary>
  68. /// This function will be called by the script itself.
  69. /// It's only public so that the editor script can call it.
  70. /// </summary>
  71. public void UpdateSize(DamageNumber damageNumber, SpriteRenderer spriteRenderer)
  72. {
  73. // Get text size
  74. Vector2 textSize = damageNumber.GetTextMesh().textBounds.size;
  75. if (spriteRenderer.drawMode == SpriteDrawMode.Simple)
  76. {
  77. // Update scale
  78. transform.localScale = new Vector3((textSize.x + sizePadding.x) * sizeFactor.x, (textSize.y + sizePadding.y) * sizeFactor.y, 1);
  79. }
  80. else
  81. {
  82. // Update sliced size
  83. spriteRenderer.size = new Vector2((textSize.x + sizePadding.x) * sizeFactor.x, (textSize.y + sizePadding.y) * sizeFactor.y);
  84. }
  85. }
  86. /// <summary>
  87. /// This function will be called by the script itself.
  88. /// It's only public so that the editor script can call it.
  89. /// </summary>
  90. public void UpdateSize(DamageNumber damageNumber, RectTransform rectTransform)
  91. {
  92. // Get text size
  93. Vector2 textSize = damageNumber.GetTextMesh().textBounds.size;
  94. // Update size delta
  95. rectTransform.sizeDelta = new Vector2((textSize.x + sizePadding.x) * sizeFactor.x, (textSize.y + sizePadding.y) * sizeFactor.y);
  96. }
  97. }
  98. }