Ошибка уменьшения кол-ва патрон при стрельбе после перезарядки

После срабатывания коротины AmmoSize() (условной перезарядки) первые несколько секунд уходят патроны из переменной maxAmmo, а не ammoSizeMag. Причем изначально всё работает отлично, и если после перезарядки подождать несколько секунд (около трёх), то всё будет также отлично работать. Уже долго не могу понять в чем ошибка, сколько бы не перепроверял код. Возможно где-то должна быть дополнительная проверка?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Weapon : MonoBehaviour
{
    [Header("All Settings")]
    private float _nextFire = 0f;
    private bool _isHaveAmmo = false;
    private bool _maxAmmo = true;
    public Animator animHands;
    public GameObject AmmoUI;
    private bool _isShooting = false;
    private bool _isReload = false;


    [Header("Weapon Settings")]
    //public float damage = 20f;
    public float fireRate = 10.0f;
    public float range = 15f;
    //public float force = 200f;

    [Header("Ammo Settings")]
    public int maxAmmo;
    public int ammoSizeMag;
    public int max_ammoSizeMag;
    public GameObject ammoSizeMagText;
    public GameObject maxAmmoText;

    public void Start()
    {
        AmmoUI.SetActive(true);
    }

    public void Update()
    {
        AmmoAll();
        GetComponents();
        if (_isShooting == true && Time.time > _nextFire)
        {
            _nextFire = Time.time + 1f / fireRate;
            AmmoCheck();
        }

        if (_maxAmmo == true)
        {
            if (_isReload == true)
            {
                StartCoroutine(AmmoSize());
            }
        }
    }

    public void GetComponents()
    {
        ammoSizeMagText.GetComponent<Text>().text = ammoSizeMag.ToString();
        maxAmmoText.GetComponent<Text>().text = maxAmmo.ToString();
    }

    public void OnClickReload()
    {
        _isReload = true;
    }

    public void OnClickShoot()
    {
        if (_isHaveAmmo == true)
        {
            _isShooting = true;
            animHands.SetBool("Shoot", true);
        }            
    }

    public void OnClickStopShoot()
    {
         _isShooting = false;
         animHands.SetBool("Shoot", false);
    }

    public void AmmoAll()
    {
        if (ammoSizeMag == 30)
        {
            _maxAmmo = false;
        }
        else if (ammoSizeMag < 30)
        {
            _maxAmmo = true;
        }

        if (maxAmmo <= 0)
        {
            _maxAmmo = false;
        }

        if (_isShooting == true && ammoSizeMag <= 0)
        {
            _isHaveAmmo = false;
            //_audioSource.PlayOneShot(noAmmo);
        }
        else if (ammoSizeMag != 0)
        {           
            _isHaveAmmo = true;
        }
    }

    public void AmmoCheck()
    {
        if (ammoSizeMag > 0 && ammoSizeMag <= 30)
        {
            _isHaveAmmo = true;
            //StartCoroutine(Ejection());
            ammoSizeMag--;
        }
    }

    public IEnumerator Ejection()
    {
        yield return new WaitForSeconds(0.1f);
        //bulletEjectionP.Play();
    }

    public IEnumerator AmmoSize()
    {
        animHands.SetBool("Reload", true);
        _isHaveAmmo = false;
        //reloadAnim.SetActive(true);
        yield return new WaitForSeconds(2.5f);
        _isHaveAmmo = true;
        //reloadAnim.SetActive(false);
        if (max_ammoSizeMag - ammoSizeMag >= maxAmmo)
        {
            ammoSizeMag += maxAmmo;
            maxAmmo = 0;
            _isReload = false;
            animHands.SetBool("Reload", false);
        }
        else
        {
            maxAmmo -= max_ammoSizeMag - ammoSizeMag;
            ammoSizeMag += max_ammoSizeMag - ammoSizeMag;
            _isReload = false;
            animHands.SetBool("Reload", false);
        }
    }

}

Ответы (0 шт):