using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; 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(PlayerType playerType = PlayerType.FirstPlayer) { if (getBulletCount == 0) { if (SceneManager.GetActiveScene().name == "InfraredGameDouble") { //���ҷ�����ʾ Create(parent.transform, bCenter, bulletTipColor, false, playerType == PlayerType.FirstPlayer? - Screen.width / 4f : Screen.width / 4f); } else { 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 ,float posX = 0) { //��ն��� //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 { float _posX = 0; RectTransform imageRect = o.transform.Find("Image").GetComponent(); // 强制刷新它的布局 LayoutRebuilder.ForceRebuildLayoutImmediate(imageRect); float _childX = imageRect.rect.width; if (posX > 0) { _posX = posX - _childX * 0.5f - 80; } else if(posX < 0) { _posX = -(Mathf.Abs(posX) - _childX * 0.5f - 80); } rectTransform.anchoredPosition = new Vector2(_posX, 120); rectTransform.localRotation = Quaternion.identity; rectTransform.localScale = Vector3.one; } //o.GetComponentInChildren().text = number.ToString($"f{CommonConfig.ringsPrecision}"); } }