Попытка сделать задержку перезагрузки в C #, но в результате ошибка - PullRequest
0 голосов
/ 27 февраля 2019

Итак, я недавно пытался создать игру, и я столкнулся с неожиданной ошибкой.

Когда я запускаю написанный мной сценарий, я могу выстрелить 10 пуль из своего пистолета, затем он играетперезагрузить звук и ждать две секунды, используя сопрограммы, и это добавляет 1200 к моему клипу без причины?Поэтому я добавил оператор if, сообщающий, что если размер клипа превышает 10, то возвращаем его к 10, но теперь он идет к 19 на несколько секунд, а затем к 10.

Я не знаю, являюсь ли яидиот или что-то еще, но был бы рад за некоторую помощь, также извините, если это дубликат, но я не смог найти ничего подобного в c #.

РЕДАКТИРОВАТЬ: я исправил ошибку сейчас, спасибо за помощь, буду делиться новым кодом после старого кода для дальнейшего использования!

Мой старый код:

{
public float fireRate = 10;
public float damage = 15;
public int clipsize;

float timeUntilFire = 0;
public float ReloadSpeed = 2.5f;
float reloadtime;

public Transform firePoint;
public GameObject bullet;
public AudioSource gunshotaudio;
public AudioSource ReloadSound;

void Awake()
{
    gunshotaudio = GetComponent<AudioSource>();
    clipsize = 10;

}


// Update is called once per frame
void Update()
{

    // if the button pressed is fire 1 and 
    if (Input.GetButtonDown("Fire1") && clipsize != 0)
    {
        timeUntilFire = Time.time / fireRate;
        gunshotaudio.Play();
        Shoot();
        clipsize -= 1;
        Debug.Log(clipsize);
    }
    if(clipsize <= 0)
    {
        ReloadSound.Play();
        StartCoroutine(Wait());
        StopCoroutine(Wait());

    }
    if(clipsize >= 11)
    {
        clipsize = 10;
    }

}

IEnumerator Wait()
{
    yield return new WaitForSecondsRealtime(2);
    clipsize += 10;

}

void Shoot()
{
    gunshotaudio.Play();
    Instantiate(bullet, firePoint.position,firePoint.rotation);
}

} ** Мой новый код: **

{
public float fireRate = 10;
public float damage = 15;
public int clipsize;

float timeUntilFire = 0;
public float ReloadSpeed = 2.5f;
float reloadtime;
bool CanShoot;
bool IsReloading;
bool reloading;


public Transform firePoint;
public GameObject bullet;
public AudioSource gunshotaudio;
public AudioSource ReloadSound;

void Awake()
{
    gunshotaudio = GetComponent<AudioSource>();
    clipsize = 10;

}
void Start()
{
    if (clipsize > 0)
    {
        CanShoot = true;
    }
}


// Update is called once per frame
void Update()
{


    // if the button pressed is fire 1 and 
    if (Input.GetButtonDown("Fire1") && clipsize != 0)
    {
        timeUntilFire = Time.time + fireRate;
        gunshotaudio.Play();
        Shoot();
        clipsize--;
        Debug.Log(clipsize);

    }
    // reloading
    if(Input.GetKeyDown(KeyCode.R))
    {
        IsReloading = true;
        ReloadSound.Play();
    }

    if (IsReloading)
    {
        StartCoroutine(Wait());
    }


}

IEnumerator Wait()
{
    if(reloading == false)
    {
        if (IsReloading)
        {
            reloading = true;
            CanShoot = false;
            yield return new WaitForSeconds(1);
            clipsize = 10;
            IsReloading = false;
            Debug.Log(clipsize);
            CanShoot = true;
            reloading = false;
        }

        else
        {

        }
    }

}

void Shoot()
{
    gunshotaudio.Play();
    Instantiate(bullet, firePoint.position,firePoint.rotation);
}

}

1 Ответ

0 голосов
/ 27 февраля 2019

Вы не проверяете, выполняется ли перезагрузка, поэтому вы ставите в очередь кучу событий перезагрузки, которые все добавляют +10 к клипу, что приводит к дополнительным функциям.

Добавление reloading bool и проверьте, что перед тем, как начать сопрограмму, и вместо добавления 10 к клипу, установите клип на 10.

...