BulletManager.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. public class BulletManager : MonoBehaviour
  5. {
  6. public Image[] bulletImages;
  7. public Sprite bulletSprite;
  8. public Sprite emptyBulletSprite;
  9. //默认子弹数量
  10. public int defaultBulletCount = 15;
  11. private int bulletCount;
  12. public GameObject parent ;
  13. [SerializeField]
  14. [Tooltip("生成子弹不足提示的位置是否在是正中心")]
  15. bool bCenter = false;
  16. [SerializeField]
  17. [Tooltip("生成子弹不足提示的字体颜色")]
  18. Color bulletTipColor;
  19. //射击数
  20. private int numberOfShotsFired = 0;
  21. public int getBulletCount {
  22. get {
  23. return bulletCount;
  24. }
  25. }
  26. void Awake()
  27. {
  28. numberOfShotsFired = 0;
  29. ResetBullets();
  30. }
  31. public void Update()
  32. {
  33. if (Input.GetKeyDown(KeyCode.Q))
  34. {
  35. if (bulletZero()) return;
  36. FireBullet();
  37. }
  38. }
  39. public void FireBullet()
  40. {
  41. if (bulletCount > 0)
  42. {
  43. bulletCount--;
  44. UpdateBullets();
  45. //记录射击的总数
  46. numberOfShotsFired++;
  47. }
  48. }
  49. public void ResetBullets()
  50. {
  51. bulletCount = defaultBulletCount;
  52. UpdateBullets();
  53. }
  54. //是否判断射击完使用
  55. public bool NumberOfShotsFired() {
  56. return numberOfShotsFired >= defaultBulletCount ? true : false;
  57. }
  58. public bool bulletZero() {
  59. if (getBulletCount == 0) {
  60. Create(parent.transform,bCenter, bulletTipColor);
  61. //暂时自动刷新,接入协议后修改效果
  62. //ResetBullets();
  63. return true;
  64. }
  65. return false;
  66. }
  67. /// <summary>
  68. /// 不需要自动删除
  69. /// </summary>
  70. /// <returns></returns>
  71. public bool bulletZeroNotDelete() {
  72. if (getBulletCount == 0)
  73. {
  74. //禁用自动删除
  75. Create(parent.transform, bCenter, bulletTipColor,true);
  76. return true;
  77. }
  78. return false;
  79. }
  80. /// <summary>
  81. /// 外部调用:手动删除所有 TipBulletNumber
  82. /// </summary>
  83. public static void RemoveBulletExternally()
  84. {
  85. for (int i = bulletNumber.Count - 1; i >= 0; i--)
  86. {
  87. if (bulletNumber[i] != null)
  88. {
  89. bulletNumber[i].Remove();
  90. }
  91. }
  92. bulletNumber.Clear();
  93. }
  94. private void UpdateBullets()
  95. {
  96. for (int i = 0; i < bulletImages.Length; i++)
  97. {
  98. if (i < bulletCount)
  99. {
  100. bulletImages[i].sprite = bulletSprite;
  101. }
  102. else
  103. {
  104. bulletImages[i].sprite = emptyBulletSprite;
  105. }
  106. }
  107. }
  108. static List<TipBulletNumber> bulletNumber = new();
  109. public static void Create(Transform parentTran,bool centerPos,Color color, bool disableAutoDelete = false)
  110. {
  111. //清空对象
  112. //for (int i = bulletNumber.Count - 1; i >= 0; i--)
  113. //{
  114. // Destroy(bulletNumber[i].gameObject);
  115. // bulletNumber.RemoveAt(i);
  116. //}
  117. RemoveBulletExternally();
  118. GameObject o = Instantiate(Resources.Load<GameObject>("Common/TipBulletNumber"));
  119. // 重置Transform属性
  120. o.transform.SetParent(parentTran);
  121. TipBulletNumber tip = o.GetComponent<TipBulletNumber>();
  122. tip.SetOutTipColor(color);
  123. tip.SetDisableAutoDelete(disableAutoDelete); // 设置是否禁用自动删除
  124. bulletNumber.Add(tip);
  125. // 获取RectTransform组件
  126. RectTransform rectTransform = o.GetComponent<RectTransform>();
  127. // 设置相对于锚点的偏移位置
  128. if (centerPos)
  129. {
  130. rectTransform.anchorMin = new Vector2(0.5f, 0.5f);
  131. rectTransform.anchorMax = new Vector2(0.5f, 0.5f);
  132. //rectTransform.anchoredPosition = new Vector2(0, rectTransform.rect.height / 2);
  133. rectTransform.anchoredPosition = new Vector2(0, 0);
  134. rectTransform.localRotation = Quaternion.identity;
  135. rectTransform.localScale = Vector3.one;
  136. }
  137. else {
  138. rectTransform.anchoredPosition = new Vector2(0, 120);
  139. rectTransform.localRotation = Quaternion.identity;
  140. rectTransform.localScale = Vector3.one;
  141. }
  142. //o.GetComponentInChildren<Text>().text = number.ToString($"f{CommonConfig.ringsPrecision}");
  143. }
  144. }