Size: a a a

2021 January 21

А

Александр in unity3d.ru
Всем привет. Кто может подсказать с одним вопросом? Есть таймер на 20 секунд с обратным отстчетом и привязанный к нему круговой прогресс бар. Проблема в том, что прогрессбар опережает таймер - остается еще 6-7 секунд, а прогрессбар уже дошел до 0. Если количество секунд указывать явно - все ок. Если через переменную 0 таймер не успевает.
источник

А

Александр in unity3d.ru
seconds -= Time.deltaTime;
loader.fillAmount -= 1.0f / seconds * Time.deltaTime;
источник

А

Александр in unity3d.ru
seconds=20
источник

AT

Alexey Telyshev in unity3d.ru
Александр
seconds -= Time.deltaTime;
loader.fillAmount -= 1.0f / seconds * Time.deltaTime;
а ты смотрел сколько получает в результате таких действий?
источник

AT

Alexey Telyshev in unity3d.ru
если прогресс бар отображает секунды, так и выводи их, а не вот это вот все
источник

А

Александр in unity3d.ru
Alexey Telyshev
а ты смотрел сколько получает в результате таких действий?
fill amount = 0.04292969, seconds=7.685894
источник

А

Александр in unity3d.ru
Alexey Telyshev
если прогресс бар отображает секунды, так и выводи их, а не вот это вот все
20 секунд отображается как 100 процентов
источник

AT

Alexey Telyshev in unity3d.ru
на старте таймер устанавливаешь макс значение таймера (те самые 100%) равным количеству засекаемых секунд. Потом с секундами все тоже самое что у тебя, а в fillAmount передаешь текущее количество оставшихся сек
источник

А

Александр in unity3d.ru
если пишу через loader.fillAmount -= 1.0f / 20* Time.deltaTime; то все работает нормально
источник

А

Александр in unity3d.ru
Alexey Telyshev
на старте таймер устанавливаешь макс значение таймера (те самые 100%) равным количеству засекаемых секунд. Потом с секундами все тоже самое что у тебя, а в fillAmount передаешь текущее количество оставшихся сек
я так и делаю
источник

AT

Alexey Telyshev in unity3d.ru
Александр
если пишу через loader.fillAmount -= 1.0f / 20* Time.deltaTime; то все работает нормально
потому что в таком случае у тебя 20 всегда 20, а в случае с переменной у тебя 20, 19.3942, 18.23435 и т.д.
источник

А

Александр in unity3d.ru
тогда мне округлять значение?
источник

AT

Alexey Telyshev in unity3d.ru
Александр
я так и делаю
ты в ручную считаешь проценты, хотя, если я не ошибаюсь, прогресс бар может сам это делать.
у становил
progress.max = 20
progress.fillAmount = 10
и он показал тебе что сейчас половина, без всяких 1/100500 * Time.deltaTime
PS
переменные могут отличаться от реальности
источник

А

Александр in unity3d.ru
Alexey Telyshev
ты в ручную считаешь проценты, хотя, если я не ошибаюсь, прогресс бар может сам это делать.
у становил
progress.max = 20
progress.fillAmount = 10
и он показал тебе что сейчас половина, без всяких 1/100500 * Time.deltaTime
PS
переменные могут отличаться от реальности
тут не совсем понял
источник

AT

Alexey Telyshev in unity3d.ru
Александр
тогда мне округлять значение?
нет. Если ты хочешь имеено таким способом решать. То просто заведи отдельную не изменямую переменную maxSeconds = 20 и текущее количество seconds = 20 инициализируй их при старте. Из seconds -= Time.deltaTime а в свое уравнение с fillAmount -= 1/maxSeconds * TIme.deltaTime передавай макс значение
источник

AT

Alexey Telyshev in unity3d.ru
должно работать как просто поставить 20 в уравнение.
источник

А

Александр in unity3d.ru
то есть завести две переменные?
источник

А

Александр in unity3d.ru
Мне две не нужны - у меня зависимость
источник

AT

Alexey Telyshev in unity3d.ru
Александр
тут не совсем понял
ты же используешь стандартный прогресс бар? В юнити люди уже позаботились о подсчете процентов за тебя. Если ты переопределишь максимальное значение в прогресс баре (по умолчанию оно наверняка 1), то потом сможешь передавать текущее значение и он сам подсчитает сколько от макс значения в текущем и отобразит скок надо.
источник

AT

Alexey Telyshev in unity3d.ru
Александр
Мне две не нужны - у меня зависимость
нужно бороться с зависимостью. Сходи в клуб ААА (это типа шутка). В чем проблема конкретно?
источник