Пятница, 29 Марта 2024, 13:24

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Time.deltaTime проблемка (Что то не работает :D)
Time.deltaTime проблемка
alec5seiДата: Среда, 21 Февраля 2018, 16:48 | Сообщение # 1
участник
Сейчас нет на сайте
Привет! Возникла проблема.
Вот код:
Код
                        UnprisonUI.SetActive (true);
   UnprisonFlo = UnprisonFlo + 300f;
   Unprison.text = "Время: " + UnprisonFlo;
   UnprisonFlo -= Time.deltaTime / 300f;


Суть: переменная float UnprisonFlo стоит 300.
И нужно что бы эти 300 медленно отнимались до полного 0. Но когда срабатывает код, он отнимает где то примерно 0.0020 и останавливается. В чем может быть проблема?




drcrackДата: Среда, 21 Февраля 2018, 17:46 | Сообщение # 2
старожил
Сейчас нет на сайте
В каком методе вообще это все происходит? Покажи код целиком
defGMDefeloperДата: Среда, 21 Февраля 2018, 18:39 | Сообщение # 3
частый гость
Сейчас нет на сайте
Где у тебя проверка что когда достигнет нуля должно остановиться?
Думаю дело в ней,т.к этот код не даст описанный вами результат


Сообщение отредактировал defGMDefeloper - Среда, 21 Февраля 2018, 18:39
alec5seiДата: Воскресенье, 25 Февраля 2018, 16:35 | Сообщение # 4
участник
Сейчас нет на сайте
drcrack, Вот

Код
void Update () {
  
  Ticket.text = "ШТРАФ: " + TicketFlo;
  if (TicketFlo <= 0f) {
   TicketFlo = 0f;
  }

        Wanted.fillAmount = WantedFlo;
  WantedFlo -= Time.deltaTime / 500f;
  if (WantedFlo >= 1f) {
   WantedFlo = 1f;
  }
  if (WantedFlo < 0) {
   WantedFlo = 0f;
  }
  if (TicketFlo >= 1 & WantedFlo <=0) {
   Alex.transform.position = PrisonSpawn.transform.position;
   UnprisonUI.SetActive (true);
   UnprisonFlo = UnprisonFlo + 300f;
   Unprison.text = "Время: " + UnprisonFlo;
   UnprisonFlo -= Time.deltaTime / 300f;
   TicketFlo = 0f;
   if (UnprisonFlo == 0) {
    Alex.transform.position = UnprisonSpawn.transform.position;
   }
  }
    }




drcrackДата: Воскресенье, 25 Февраля 2018, 17:53 | Сообщение # 5
старожил
Сейчас нет на сайте
У тебя условие if (TicketFlo >= 1 и далее внизу TicketFlo = 0f;
defGMDefeloperДата: Воскресенье, 25 Февраля 2018, 18:04 | Сообщение # 6
частый гость
Сейчас нет на сайте
Используй линейную интерполяцию . Mathf.Lerp
добавь переменную time (коефициент интерполяции) и меняй её от 1 до 0;
после изменения пиши Mathf.Clamp01(time);
Я всегда так делаю.Ибо оператор == работает не точно,сам проверял.
Скажем я делал проверку на число и оно останавливалось на тысячных,что мне не подходит,ибо мне нужно точно.
Старайся избегать if в принципе.делай код более линейным.


Сообщение отредактировал defGMDefeloper - Воскресенье, 25 Февраля 2018, 18:06
alec5seiДата: Воскресенье, 25 Февраля 2018, 18:28 | Сообщение # 7
участник
Сейчас нет на сайте
drcrack, Таймер заработал.. Но почему то не отнимает до 0 а прибавляет.
А если я это
Код
UnprisonFlo = UnprisonFlo + 300f;

напишу так
Код
UnprisonFlo = 300f;

то он так же не сработает. И персонаж почему то с места не может сдвинуться)

Добавлено (25 Февраля 2018, 18:28)
---------------------------------------------
defGMDefeloper, Я новенький в программировании и немного не понял как это сделать :)




drcrackДата: Воскресенье, 25 Февраля 2018, 20:07 | Сообщение # 8
старожил
Сейчас нет на сайте
Цитата
Но почему то не отнимает до 0 а прибавляет.

Потому что ты прибавляешь +300f каждый кадр прежде чем вычесть
Код
UnprisonFlo = UnprisonFlo + 300f;
Unprison.text = "Время: " + UnprisonFlo;
UnprisonFlo -= Time.deltaTime / 300f;
alec5seiДата: Понедельник, 12 Марта 2018, 15:34 | Сообщение # 9
участник
Сейчас нет на сайте
drcrack, Что то я вообще запутался. Ничего не понял :(
А если я в переменной
Код
public float UnprisonFlo = 0f;
поставлю сразу 300, то он все равно не работает.

Добавлено (12 Марта 2018, 15:34)
---------------------------------------------
Все, сделал.
А сделал так - Добавил булевую переменную и включал ее в тот момент когда нужно.
Вот так короче:
Код
if (TicketFlo >= 1 & WantedFlo <= 0) {
   Alex.transform.position = PrisonSpawn.transform.position;
   TicketFlo = 0f;
   Prison = true;
  }
  if (Prison == true) {
   UnprisonFlo -= Time.deltaTime / 300f;
   UnprisonText.SetActive (true);
   if (UnprisonFlo <= 0) {
    Alex.transform.position = UnprisonSpawn.transform.position;
    UnprisonText.SetActive (false);
    Prison = false;
    UnprisonFlo = 100f;
   }
  }

%) :)






Сообщение отредактировал alec5sei - Понедельник, 12 Марта 2018, 15:35
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Time.deltaTime проблемка (Что то не работает :D)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг