BulletManager.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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 FireBullet()
  32. {
  33. if (bulletCount > 0)
  34. {
  35. bulletCount--;
  36. UpdateBullets();
  37. //记录射击的总数
  38. numberOfShotsFired++;
  39. }
  40. }
  41. public void ResetBullets()
  42. {
  43. bulletCount = defaultBulletCount;
  44. UpdateBullets();
  45. }
  46. //是否判断射击完使用
  47. public bool NumberOfShotsFired() {
  48. return numberOfShotsFired >= defaultBulletCount ? true : false;
  49. }
  50. public bool bulletZero() {
  51. if (getBulletCount == 0) {
  52. Create(parent.transform,bCenter, bulletTipColor);
  53. //暂时自动刷新,接入协议后修改效果
  54. //ResetBullets();
  55. return true;
  56. }
  57. return false;
  58. }
  59. private void UpdateBullets()
  60. {
  61. for (int i = 0; i < bulletImages.Length; i++)
  62. {
  63. if (i < bulletCount)
  64. {
  65. bulletImages[i].sprite = bulletSprite;
  66. }
  67. else
  68. {
  69. bulletImages[i].sprite = emptyBulletSprite;
  70. }
  71. }
  72. }
  73. static List<GameObject> bulletNumber = new();
  74. public static void Create(Transform parentTran,bool centerPos,Color color)
  75. {
  76. //清空对象
  77. for (int i = bulletNumber.Count - 1; i >= 0; i--)
  78. {
  79. Destroy(bulletNumber[i].gameObject);
  80. bulletNumber.RemoveAt(i);
  81. }
  82. GameObject o = Instantiate(Resources.Load<GameObject>("Common/TipBulletNumber"));
  83. // 重置Transform属性
  84. o.transform.SetParent(parentTran);
  85. o.GetComponent<TipBulletNumber>().SetOutTipColor(color);
  86. // 获取RectTransform组件
  87. RectTransform rectTransform = o.GetComponent<RectTransform>();
  88. // 设置相对于锚点的偏移位置
  89. if (centerPos)
  90. {
  91. rectTransform.anchorMin = new Vector2(0.5f, 0.5f);
  92. rectTransform.anchorMax = new Vector2(0.5f, 0.5f);
  93. //rectTransform.anchoredPosition = new Vector2(0, rectTransform.rect.height / 2);
  94. rectTransform.anchoredPosition = new Vector2(0, 0);
  95. rectTransform.localRotation = Quaternion.identity;
  96. rectTransform.localScale = Vector3.one;
  97. }
  98. else {
  99. rectTransform.anchoredPosition = new Vector2(0, 120);
  100. rectTransform.localRotation = Quaternion.identity;
  101. rectTransform.localScale = Vector3.one;
  102. }
  103. //o.GetComponentInChildren<Text>().text = number.ToString($"f{CommonConfig.ringsPrecision}");
  104. bulletNumber.Add(o);
  105. }
  106. }