Я использую сопрограмму, чтобы сделать небольшой перерыв, который перезагружает пулю. Я не знаю, почему это не работает, то есть нет времени ждать. Вероятно, я неправильно использую сопрограмму. Кто-нибудь может мне помочь?
if (Input.GetMouseButton(0) && Time.time > nextFire && !inventoryInterface.activeSelf)
{
//aimAnimator.SetTrigger("Shoot");
nextFire = Time.time + fireRate;
if (count < gun.bulletsInAMagazine)
{
Vector3 mousePosition = UtilsClass.GetMouseWorldPosition();
OnShoot?.Invoke(this, new OnShootEventArgs
{
gunEndPointPosition = aimGunEndPointPosition.position,
shootPosition = mousePosition
});
count++;
}
else
{
count = 0;
StartCoroutine(FireCooldown());
Debug.Log("Reloading");
}
//StartCoroutine(FireCooldown());
//allowFire = true;
}
И счетчик:
IEnumerator FireCooldown()
{
yield return new WaitForSeconds(gun.reloadTime);
}
короче: да, это неправильно... в общем: если он не делает того, что вы от него ожидали, то, вероятно, он неправ;)
При использовании сопрограммы функция, которую вы хотите запустить, должна быть записана под yield return.
IEnumerator FireCooldown()
{
yield return new WaitForSeconds(gun.reloadTime);//check that gun.reloadTime is not null
// and type here the method that you want to run after reloading
}
Добро пожаловать в stackoverflow.com. Пожалуйста, дайте некоторое описание предоставленному коду
Вам нужно изменить allowFire
bool на true внутри сопрограммы.
IEnumerator FireCooldown()
{
yield return new WaitForSeconds(gun.reloadTime);
allowFire = true;
}
Установите свою переменную в сопрограмме после задержки. StartCoroutine НЕ создает задержку, задержка содержится в методе сопрограммы.