| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- 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;
- }
- /// <summary>
- /// 不需要自动删除
- /// </summary>
- /// <returns></returns>
- public bool bulletZeroNotDelete() {
- if (getBulletCount == 0)
- {
- //禁用自动删除
- Create(parent.transform, bCenter, bulletTipColor,true);
- return true;
- }
- return false;
- }
- /// <summary>
- /// 外部调用:手动删除所有 TipBulletNumber
- /// </summary>
- 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<TipBulletNumber> 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<GameObject>("Common/TipBulletNumber"));
- // 重置Transform属性
- o.transform.SetParent(parentTran);
- TipBulletNumber tip = o.GetComponent<TipBulletNumber>();
- tip.SetOutTipColor(color);
- tip.SetDisableAutoDelete(disableAutoDelete); // 设置是否禁用自动删除
- bulletNumber.Add(tip);
- // 获取RectTransform组件
- RectTransform rectTransform = o.GetComponent<RectTransform>();
- // 设置相对于锚点的偏移位置
- 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>().text = number.ToString($"f{CommonConfig.ringsPrecision}");
- }
- }
|