using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class BulletManager : MonoBehaviour { public Image[] bulletImages; public Sprite bulletSprite; public Sprite emptyBulletSprite; //默认子弹数量 public int defaultBulletCount = 15; private int bulletCount; public GameObject parent ; [SerializeField] [Tooltip("生成子弹不足提示的位置是否在是正中心")] bool bCenter = false; [SerializeField] [Tooltip("生成子弹不足提示的字体颜色")] Color bulletTipColor; //射击数 private int numberOfShotsFired = 0; public int getBulletCount { get { return bulletCount; } } void Awake() { numberOfShotsFired = 0; ResetBullets(); } public void Update() { if (Input.GetKeyDown(KeyCode.Q)) { if (bulletZero()) return; FireBullet(); } } public void FireBullet() { if (bulletCount > 0) { bulletCount--; UpdateBullets(); //记录射击的总数 numberOfShotsFired++; } } public void ResetBullets() { bulletCount = defaultBulletCount; UpdateBullets(); } //是否判断射击完使用 public bool NumberOfShotsFired() { return numberOfShotsFired >= defaultBulletCount ? true : false; } public bool bulletZero() { if (getBulletCount == 0) { Create(parent.transform,bCenter, bulletTipColor); //暂时自动刷新,接入协议后修改效果 //ResetBullets(); return true; } return false; } /// /// 不需要自动删除 /// /// public bool bulletZeroNotDelete() { if (getBulletCount == 0) { //禁用自动删除 Create(parent.transform, bCenter, bulletTipColor,true); return true; } return false; } /// /// 外部调用:手动删除所有 TipBulletNumber /// public static void RemoveBulletExternally() { for (int i = bulletNumber.Count - 1; i >= 0; i--) { if (bulletNumber[i] != null) { bulletNumber[i].Remove(); } } bulletNumber.Clear(); } private void UpdateBullets() { for (int i = 0; i < bulletImages.Length; i++) { if (i < bulletCount) { bulletImages[i].sprite = bulletSprite; } else { bulletImages[i].sprite = emptyBulletSprite; } } } static List bulletNumber = new(); public static void Create(Transform parentTran,bool centerPos,Color color, bool disableAutoDelete = false) { //清空对象 //for (int i = bulletNumber.Count - 1; i >= 0; i--) //{ // Destroy(bulletNumber[i].gameObject); // bulletNumber.RemoveAt(i); //} RemoveBulletExternally(); GameObject o = Instantiate(Resources.Load("Common/TipBulletNumber")); // 重置Transform属性 o.transform.SetParent(parentTran); TipBulletNumber tip = o.GetComponent(); tip.SetOutTipColor(color); tip.SetDisableAutoDelete(disableAutoDelete); // 设置是否禁用自动删除 bulletNumber.Add(tip); // 获取RectTransform组件 RectTransform rectTransform = o.GetComponent(); // 设置相对于锚点的偏移位置 if (centerPos) { rectTransform.anchorMin = new Vector2(0.5f, 0.5f); rectTransform.anchorMax = new Vector2(0.5f, 0.5f); //rectTransform.anchoredPosition = new Vector2(0, rectTransform.rect.height / 2); rectTransform.anchoredPosition = new Vector2(0, 0); rectTransform.localRotation = Quaternion.identity; rectTransform.localScale = Vector3.one; } else { rectTransform.anchoredPosition = new Vector2(0, 120); rectTransform.localRotation = Quaternion.identity; rectTransform.localScale = Vector3.one; } //o.GetComponentInChildren().text = number.ToString($"f{CommonConfig.ringsPrecision}"); } }