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

Unity C# задержка

Страницы: 1 2 Следующая »
#0
16:36, 27 мар. 2014

Всем привет,
Сейчас я изучаю скриптование под юнити на C#, сам язык я плохо знаю, так что пожалуйста не надо грузить меня терминами.
Так вот, вопрос в том, как сделать так, чтобы во время перезарядки нельзя было стрелять.


Я где-то нашёл вот такую тему:
System.Threading.Thread.Sleep(2000);
, но из за неё виснет и вся игра.


#1
16:52, 27 мар. 2014

Kano_Tanaka
То есть стрельба уже сделана?

Когда начинаешь перезарядку, ставишь флажок. Если флажок поставлен, стрелять нельзя. Когда перезарядка закончена, снимаешь флажок.

#2
17:36, 27 мар. 2014

Да нет, вопрос в том, как задать эту паузу и задать её продолжительность на C#

#3
18:19, 27 мар. 2014

Kano_Tanaka
Когда начинаешь перезарядку, запоминаешь текущее время. Когда время на перезарядку кончилось, снимаешь флажок.

#4
18:22, 27 мар. 2014

Как же ты сделал стрельбу если не можешь сделать такую простую вещь?

#5
19:06, 27 мар. 2014

http://docs.unity3d.com/Documentation/ScriptReference/WaitForSeconds.html

#6
20:11, 27 мар. 2014

-Eugene-
что за флажок?

Edisoni
yutube

stantler
Вставил этот код - выдало 4 шибки: "Ожидалось определение типа или пространства имён, либо признак конца файла"

#7
20:24, 27 мар. 2014

Kano_Tanaka
> что за флажок?
Булева переменная

#8
21:33, 27 мар. 2014

-Eugene-
О, слушай, а можно сделать так, чтобы программа продолжила своё выполнение только по окончании звуковой дорожки перезарядки?
И если можно, то как.

#9
22:16, 27 мар. 2014

Kano_Tanaka
// так делать неправильно :)
Yield return new WaitForSeconds (GetComponent <AudioSource>().clip.length);

#10
22:31, 27 мар. 2014

Kano_Tanaka
Программу вообще никак тормозить не надо. Точно так же как не надо тормозить программу в паузах между выстрелами

#11
0:20, 28 мар. 2014

-Eugene-
А что ты тогда предлагаешь?

#12
1:15, 28 мар. 2014

Kano_Tanaka
> О, слушай, а можно сделать так, чтобы программа продолжила своё выполнение
> только по окончании звуковой дорожки перезарядки?
Типа и весь мир подождёт, все враги и всё движение замрёт, пока герой перезаряжает? Бред же. Ты это уже и попытался сделать в нулевом сообщении: System.Threading.Thread.Sleep(2000); Это и есть стоп программы на 2 секунды.

Kano_Tanaka
> А что ты тогда предлагаешь?
Тебе уже рассказали.

Заводишь в скрипте, который отвечает за стрельбу, переменную типа bool, например: bool bShooting; Это и будет наш флаг, разрешающий / запрещающий стрельбу.

И прежде чем разрешить стрелять, проверяешь в коде этот флаг:

if( bShooting )
{
    Shoot(); //стреляем
}

Когда патроны кончились или идёт перезарядка ставишь bShooting = false;
закончилась перезарядка, ставишь  bShooting = true;
Перезарядка либо длиться какое-то время, либо пока проигрывается звук перезарядки (или анимация) - что угодно. Проверяешь, когда звук проиграется, ставишь флаг в нужное положение.


Kano_Tanaka
> C#, сам язык я плохо знаю
Так учи язык и программирование в целом, раз уж собрался скрипты писать для игр. И такие вопросы сами отпадут.

#13
3:00, 28 мар. 2014

TirexiK
> закончилась перезарядка, ставишь  bShooting = true;
> Перезарядка либо длиться какое-то время, либо пока проигрывается звук
> перезарядки (или анимация) - что угодно. Проверяешь, когда звук проиграется,
> ставишь флаг в нужное положение.

Так в этом вопрос с самого начала и состоял: как указать программе промежуток времени, в который идёт перезарядка, и как проверить, что перезарядка(то бишь звук перезарядки) кончилась? А не в том, как ограничить стрельбу.

#14
10:25, 28 мар. 2014

Kano_Tanaka
> как указать программе промежуток времени, в который идёт перезарядка, и как
> проверить, что перезарядка(то бишь звук перезарядки) кончилась?

float reloadTimer = 3000f; //твой промежуток времени
void Update()
{
   reloadTimer -= Time.deltaTime;
   if ( reloadTimer <= 0 )
   {
        bShooting = true; //можно стрелять
   }
}
Программирование немножко отличается от написания реферата. С увеличением сложности программы копипаст дает все меньше и меньше результата. Так что учи язык и практикуйся, не отмазывайся "плохо знаю, не надо грузить"
Страницы: 1 2 Следующая »
ПрограммированиеФорумИгровая логика и ИИ

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

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