Глюки со временем

Программирование для iPhone & Android

Глюки со временем

Сообщение Sef 15 авг 2011, 16:54

Значит на уровни есть пушка, она стреляет в определенное время от начала уровня. Время до выстрела пушка отсчитывается примерно так:
time += Time.deltaTime;
if (time > 10f)
...
Стреляет на 10й секунде со старта игры. Стреляет точно по времени, проверял при выстреле так:
Debug.Log(Time.timeSinceLevelLoad);

Но персонажи, мать их, должны проскочить этот выстрел (для эффектности). На Mac нормально проскакивают, на iOS попадают под выстрел и убиваются. Хотя их движение тоже с * Time.deltaTime
Уже четыре дня перебираю код и через Debug.Log на iOS выяснил что во время движения они потихоньку, на доли секунд начинают отставать. Или все таки в коде где-то глюк... или какая-то погрешность на разных ОС случаться может?
Аватара пользователя
Sef
Старожил
 
Сообщения: 595
Зарегистрирован: 29 окт 2009, 13:24
  • ICQ

Re: Глюки со временем

Сообщение Zaicheg 15 авг 2011, 17:05

У меня была какая-то жопа с Time.time на iOS. Причём, она была проектозависимой. Я перевёл всё на realtimeSinceStartup (изменений timeScale в игре нет) — всё пришло в порядок. Причин жопы не знаю до сих пор.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Глюки со временем

Сообщение Sef 15 авг 2011, 17:46

Блин, у меня на timeScale = 0 пауза всей анимации, партиклов и т.п. :( Не получится уже переделать... А если отладить время на iOS, глюков не должно быть на разных версиях этой iOS?
Аватара пользователя
Sef
Старожил
 
Сообщения: 595
Зарегистрирован: 29 окт 2009, 13:24
  • ICQ

Re: Глюки со временем

Сообщение Sef 16 авг 2011, 18:14

Вроде исправил перенеся движение персонажей из Update() в FixedUpdate()... но теперь вроде как рывками стали двигаться... буду тестить.
Аватара пользователя
Sef
Старожил
 
Сообщения: 595
Зарегистрирован: 29 окт 2009, 13:24
  • ICQ

Re: Глюки со временем

Сообщение raul82 16 авг 2011, 18:42

Синтаксис:
Используется csharp
 void FixedUpdate()
   {
       if (Global.GameStarted)
       {
           timer = timer - Time.deltaTime;
         if (timer <= 0.0f)
         {
             //print("timer " + timer);
           Xplode();
         }

       }
   }
 

у меня тоже были проблемы со временем и эффектом "stop motion", каждой бомбе я ставил таймер и как оказалось срабатывала она на +/-20% времени пожже/раньше, изза чего мой шаттл от последовательности взрывов летал немного неправильно "иногда".
решил так как в примере выше,т.е когда случаеца фиксид апдейт я отнимаю от таймера Time.deltaTime( которая равна Fixed Timestemp).
очень простое решение, а до этого баловался коротинами и собственными таймерами.
5 годиков 7 месяцев
Аватара пользователя
raul82
Старожил
 
Сообщения: 506
Зарегистрирован: 21 янв 2011, 17:48
Откуда: Алматы

Re: Глюки со временем

Сообщение Zaicheg 16 авг 2011, 19:08

Sef писал(а):Вроде исправил перенеся движение персонажей из Update() в FixedUpdate()... но теперь вроде как рывками стали двигаться... буду тестить.

Конечно рывками. Есть разница — менять позицию каждый кадр или через фиксированные интервалы.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Глюки со временем

Сообщение Sef 16 авг 2011, 19:55

И как мне тогда вернуть гладкость? Рассчитывать шаг в FixedUpdate, а в Update изменять transform.position на этот шаг?
Завтра поиграюсь...
Аватара пользователя
Sef
Старожил
 
Сообщения: 595
Зарегистрирован: 29 окт 2009, 13:24
  • ICQ

Re: Глюки со временем

Сообщение Zaicheg 16 авг 2011, 22:50

Можно попробовать отвязать игру от timeScale (паузу переделать) и перейти на realtimeSinceStartup. Только проверить сначала, поможет ли переход.
Кстати, а ты проверял соответствие Time.time и realtimeSinceStartup? В моём случае первый отставал от второго. Проверить просто:
if (Time.time - timerA > 5f)
print((Time.time - timerA) + " / " + (Time.realtimeSinceStartup - timerA));
timerA = Time.realtimeSinceStartup;
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Глюки со временем

Сообщение Sef 17 авг 2011, 00:06

Нет, не проверял, проверю. Только я пока еще не понял в чем они отличаются :)
А чем останавливать все партиклы, 3д анимацию и т.п. без timeScale = 0?
Аватара пользователя
Sef
Старожил
 
Сообщения: 595
Зарегистрирован: 29 окт 2009, 13:24
  • ICQ

Re: Глюки со временем

Сообщение Zaicheg 17 авг 2011, 11:56

Animation.Stop или AnimationState.speed = 0f;
Particle.velocity = 0f; (if (Particle.velocity == 0f) Particle.energy += timer)) // прибавляем энергию, чтобы частица не исчезла за время паузы. Как timer считать точно не скажу, но придумать можно\
либо запомнить Particle.position перед паузой и в паузе присваивать её каждый кадр (тоже самое для поворота, цвета и прочих параметров)
Вполне возможно, что такой перебор частиц будет дико дорогим, но вдруг нет.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Глюки со временем

Сообщение Sef 17 авг 2011, 12:43

Тяжко так будет... сейчас загрузил партикл в сцену и забыл )

Если правильно померил соответствие:
Мак: 5.005457 / 5.496094
iOS: 5.027791 / 6.382702
Аватара пользователя
Sef
Старожил
 
Сообщения: 595
Зарегистрирован: 29 окт 2009, 13:24
  • ICQ

Re: Глюки со временем

Сообщение Zaicheg 17 авг 2011, 12:46

35% на всякие неучтённые операции не спишешь, так что да, Time.time на iOS у вас идёт медленнее чем должен.
Можно ещё с реальным временем сверить (по часам) — взять только интервал побольше. Ну это если интересно.

Только я пока еще не понял в чем они отличаются

realtimeSinceStartup не зависит от timeScale
И вроде бы источник данных у него другой.
"Note that realtimeSinceStartup returns time as reported by system timer. "
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Глюки со временем

Сообщение Sef 17 авг 2011, 13:11

Ну тогда и таймер пушки должен тоже отставать, он же тоже на deltaTime...
Аватара пользователя
Sef
Старожил
 
Сообщения: 595
Зарегистрирован: 29 окт 2009, 13:24
  • ICQ

Re: Глюки со временем

Сообщение Sef 17 авг 2011, 13:55

Короче перенес движение в FixedUpdate и в нем уже шаг умножаю на deltaTime, а кое какую анимацию на персонажах оставил в Update... в принципе все гладко и без опозданий.
Аватара пользователя
Sef
Старожил
 
Сообщения: 595
Зарегистрирован: 29 окт 2009, 13:24
  • ICQ

Re: Глюки со временем

Сообщение raul82 17 авг 2011, 14:24

блин а я как оказалось не победил свой такой же баг,начал записывать видео новое для рассылки с ревью...
у меня для прохождения уровня надо траить его несколько раз(точно расставлять бомбы на поле), и вот 1 раз из 5 шаттл обязательно полетит чуть чуть криво и не пройдет препятствие.
5 годиков 7 месяцев
Аватара пользователя
raul82
Старожил
 
Сообщения: 506
Зарегистрирован: 21 янв 2011, 17:48
Откуда: Алматы

След.

Вернуться в iPhone & Android

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6