Войти
ПрограммированиеФорумИгровая логика и ИИ

Unity C# задержка (2 стр)

Страницы: 1 2
#15
13:24, 28 мар. 2014

Помеха
Странно, то есть вроде никаких ошибок не выдаёт, а переменную всё равно до нуля не умньшает. Вот фрагмент кода:

void Update ()
  {
    if (MagazineLeft > 0 && TimeForReloading <= 0 && Input.GetMouseButtonDown (0))
    {
            MagazineLeft --;
            Transform AmmoSAInstance = (Transform)Instantiate (AmmoSA, GameObject.Find ("Muzzle").transform.position, Quaternion.identity);
            AmmoSAInstance.rigidbody.AddForce (transform.forward * AmmoSASpeed);
            audio.PlayOneShot(aFire);
    }

    if (MagazineLeft != MagazineContainer)
    {
        if (Input.GetButtonDown ("Reload"))
        {
            TimeForReloading = NomenalTimeForReloading;
           
            TimeForReloading -= Time.deltaTime;
           
            Debug.Log("Reloading");
            MagazineLeft = MagazineContainer;
            audio.PlayOneShot(aReload);

        }
    }
  }

Не понимаю, что не так


#16
13:40, 28 мар. 2014

Kano_Tanaka
> TimeForReloading -= Time.deltaTime;
это должно выполняться всегда, когда TimeForReloading > 0, а не только в твоем if-блоке

#17
14:18, 28 мар. 2014

то есть вынести примерно вот это:


if (TimeForReloading > 0){
TimeForReloading -= Time.deltaTime;
}

в полость функции Update()?
Так тоже не работает

#18
15:35, 28 мар. 2014

Kano_Tanaka
Что именно не работает?
Патроны заканчиваются при стрельбе?
Перезарядка происходит?
Становится ли при этом TimeForReloading равным NomenalTimeForReloading?
Чему равно NomenalTimeForReloading?
Выполнение всегда доходит до строчки if (TimeForReloading > 0)?

Кстати, надо добавить:

if (Input.GetButtonDown ("Reload") && TimeForReloading <= 0f)

#19
19:44, 28 мар. 2014

Помеха
Патроны заканчиваются, затем происходит перезарядка и они восстанавливаются, но таймер не кончается, и стрельба остаётся невозможной. Такое происходит почти при любом значении NomenalTimeForReloading, кроме 0 или других крайне малых величин, которые всё равно не дают нужного результата.

С помощью Debug.Log я смог узнать, что TimeForReloading уменьшается только один раз на очень маленькую величину, примерно равную 0.017

Помеха
> if (Input.GetButtonDown ("Reload") && TimeForReloading <= 0f)
А это зачем, кстати, а зачем там f?

#20
20:39, 28 мар. 2014

Kano_Tanaka
    if (MagazineLeft != MagazineContainer)
>     {
>         if (Input.GetButtonDown ("Reload"))
>         {
>             TimeForReloading = NomenalTimeForReloading;
>            
            TimeForReloading -= Time.deltaTime;
>            
>             Debug.Log("Reloading");
            MagazineLeft = MagazineContainer;
>             audio.PlayOneShot(aReload);
>
>         }
>     }

Ты отнимаешь время от таймера перезарядки 1 раз, в тот момент, когда нажимаешь кнопку перезарядки.

#21
20:56, 28 мар. 2014
void Update () 
{ 
    if (MagazineLeft > 0 && TimeForReloading <= 0 && Input.GetMouseButtonDown (0)) 
    { 
            MagazineLeft --; 
            Transform AmmoSAInstance = (Transform)Instantiate (AmmoSA, GameObject.Find ("Muzzle").transform.position, Quaternion.identity); 
            AmmoSAInstance.rigidbody.AddForce (transform.forward * AmmoSASpeed); 
            audio.PlayOneShot(aFire); 
    }

    if (MagazineLeft != MagazineContainer && TimeForReloading <= 0) 
    { 
        if (Input.GetButtonDown ("Reload")) 
        { 
            TimeForReloading = NomenalTimeForReloading; 
                        
            Debug.Log("Reloading"); 
            MagazineLeft = MagazineContainer; 
            audio.PlayOneShot(aReload);

        } 
    } 

    if(TimeForReloading > 0) TimeForReloading -= Time.deltaTime;
}

Так попробуй

#22
21:06, 28 мар. 2014

Kano_Tanaka
> примерно равную 0.017
это 1 секунда / кол-во фрэймов в секунду (в твоём случае 60),
крч, кол-во времени прошедшее с момента отрисовки предыдущего кадра.

т.е. NomenalTimeForReloading тебе следует задавать в секундах,
NomenalTimeForReloading = 2, длина перезарядки = 2 секунды,
NomenalTimeForReloading = 1.5f = полторы секунды.

f в конце числа показывает что у тебя число типа float
123 - int
123.5 - double
123.5f - float

#23
21:19, 28 мар. 2014

ftpud
Спасиб большое, помог.
=)

Страницы: 1 2
ПрограммированиеФорумИгровая логика и ИИ

Тема в архиве.

Тема закрыта.