Всем привет,
Сейчас я изучаю скриптование под юнити на C#, сам язык я плохо знаю, так что пожалуйста не надо грузить меня терминами.
Так вот, вопрос в том, как сделать так, чтобы во время перезарядки нельзя было стрелять.
Я где-то нашёл вот такую тему:
System.Threading.Thread.Sleep(2000);
, но из за неё виснет и вся игра.
Kano_Tanaka
То есть стрельба уже сделана?
Когда начинаешь перезарядку, ставишь флажок. Если флажок поставлен, стрелять нельзя. Когда перезарядка закончена, снимаешь флажок.
Да нет, вопрос в том, как задать эту паузу и задать её продолжительность на C#
Kano_Tanaka
Когда начинаешь перезарядку, запоминаешь текущее время. Когда время на перезарядку кончилось, снимаешь флажок.
Как же ты сделал стрельбу если не можешь сделать такую простую вещь?
-Eugene-
что за флажок?
Edisoni
yutube
stantler
Вставил этот код - выдало 4 шибки: "Ожидалось определение типа или пространства имён, либо признак конца файла"
Kano_Tanaka
> что за флажок?
Булева переменная
-Eugene-
О, слушай, а можно сделать так, чтобы программа продолжила своё выполнение только по окончании звуковой дорожки перезарядки?
И если можно, то как.
Kano_Tanaka
// так делать неправильно :)
Yield return new WaitForSeconds (GetComponent <AudioSource>().clip.length);
Kano_Tanaka
Программу вообще никак тормозить не надо. Точно так же как не надо тормозить программу в паузах между выстрелами
-Eugene-
А что ты тогда предлагаешь?
Kano_Tanaka
> О, слушай, а можно сделать так, чтобы программа продолжила своё выполнение
> только по окончании звуковой дорожки перезарядки?
Типа и весь мир подождёт, все враги и всё движение замрёт, пока герой перезаряжает? Бред же. Ты это уже и попытался сделать в нулевом сообщении: System.Threading.Thread.Sleep(2000); Это и есть стоп программы на 2 секунды.
Kano_Tanaka
> А что ты тогда предлагаешь?
Тебе уже рассказали.
Заводишь в скрипте, который отвечает за стрельбу, переменную типа bool, например: bool bShooting; Это и будет наш флаг, разрешающий / запрещающий стрельбу.
И прежде чем разрешить стрелять, проверяешь в коде этот флаг:
if( bShooting )
{
Shoot(); //стреляем
}
Когда патроны кончились или идёт перезарядка ставишь bShooting = false;
закончилась перезарядка, ставишь bShooting = true;
Перезарядка либо длиться какое-то время, либо пока проигрывается звук перезарядки (или анимация) - что угодно. Проверяешь, когда звук проиграется, ставишь флаг в нужное положение.
Kano_Tanaka
> C#, сам язык я плохо знаю
Так учи язык и программирование в целом, раз уж собрался скрипты писать для игр. И такие вопросы сами отпадут.
TirexiK
> закончилась перезарядка, ставишь bShooting = true;
> Перезарядка либо длиться какое-то время, либо пока проигрывается звук
> перезарядки (или анимация) - что угодно. Проверяешь, когда звук проиграется,
> ставишь флаг в нужное положение.
Так в этом вопрос с самого начала и состоял: как указать программе промежуток времени, в который идёт перезарядка, и как проверить, что перезарядка(то бишь звук перезарядки) кончилась? А не в том, как ограничить стрельбу.
Kano_Tanaka
> как указать программе промежуток времени, в который идёт перезарядка, и как
> проверить, что перезарядка(то бишь звук перезарядки) кончилась?
float reloadTimer = 3000f; //твой промежуток времени void Update() { reloadTimer -= Time.deltaTime; if ( reloadTimer <= 0 ) { bShooting = true; //можно стрелять } }
Тема в архиве.
Тема закрыта.