Я создаю скрипт перезагрузки для моего PlayerController.Я следую указаниям Брэки: https://www.youtube.com/watch?v=kAx5g9V5bcM.Его метод использует IEnumerators и WaitForSeconds для добавления времени перезагрузки.Говоря в основном, я регистрирую «перезагрузку» до выхода, а запись «перезагружаю» после выхода.Но я получаю «перезагрузку» и «перезагрузку» одновременно.
Я попытался увеличить время перезагрузки, если время было слишком коротким, но ничего не помогло.
Здесьэто внутри моего класса.Я не получаю ошибок.
public float speed;
private Rigidbody2D rb;
private Vector2 moveVelocity;
public GameObject bullet;
public GameObject shootPoint;
//public float ammo = 6;
//[HideInInspector] public bool reloading = false;
//[SerializeField] private float reloadTime = 3;
//private float reloadState;
public int maxAmmo = 10;
private int currentAmmo;
public float reloadTime = 100f;
private bool isReloading = false;
public float health = 50f;
void Start()
{
rb = GetComponent<Rigidbody2D>();
health = 50;
currentAmmo = maxAmmo;
}
void Update()
{
Vector2 moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
moveVelocity = moveInput * speed;
if (isReloading) {
return;
}
if (currentAmmo <= 0) {
StartCoroutine(Reload());
return;
}
if (Input.GetButtonUp("Shoot")) {
Instantiate(bullet, shootPoint.transform.position, Quaternion.identity);
currentAmmo--;
}
}
void FixedUpdate()
{
rb.MovePosition(rb.position + moveVelocity * Time.fixedDeltaTime);
}
void OnTriggerEnter2D(Collider2D other) {
if(other.gameObject.tag == "Bullet") {
health--;
//Debug.Log("Player 1 Health: " + health);
Destroy(other.gameObject);
}
}
IEnumerator Reload()
{
Debug.Log("reloading");
isReloading = true;
yield return new WaitForSeconds(reloadTime);
currentAmmo = maxAmmo;
isReloading = false;
Debug.Log("reloaded");
}
Как я уже сказал, я не получаю никаких ошибок.Я ожидаю, что я не смогу стрелять в течение одной секунды, но я могу стрелять, и перезарядка не займет одну секунду.