Отслеживание прошедшего времени C # / Unity

Я создаю ритмическую игру на C # и Unity, и мне не удалось найти прямую корреляцию между проблемами, с которыми сталкиваются некоторые из моих игроков, и их оборудованием, но у некоторых из них возникают проблемы с игровым процессом, постепенно рассинхронизирующимся с музыка со временем. Обычно проходит пара минут, прежде чем это становится заметным, но это определенно случается и портит ощущение от игры.

Я отслеживаю прошедшее время с помощью двойника и добавляю к нему Time.deltaTime (время между кадрами), и я предполагаю, что с этим связаны только очень маленькие ошибки точности, и это то, что вызывает постепенную рассинхронизацию. .

Есть ли более точный способ сделать это? Я думаю, что получение времени начала игрового процесса, а затем вычитание этого времени для каждого кадра из текущего времени может сделать его более точным? Я пробовал синхронизировать время игрового процесса со звуковым временем (Bass.NET предоставляет способ получить позицию песни за секунды), но, хотя это работает для меня и многих других, в итоге у других появляется приличное аппаратное заикание (моя игра в целом отлично работает даже на 8-10-летних ПК).


person Ryan Foster    schedule 15.10.2017    source источник
comment
Вместо этого вы можете попробовать использовать DateTime.   -  person Everts    schedule 15.10.2017
comment
В Unity Time.deltaTime - это самый точный способ определения времени. Если вы можете объяснить, как вы используете его для своего кода, и опубликуете свой код, возможно, другие люди придумают лучший способ.   -  person Programmer    schedule 15.10.2017
comment
Я объяснил, как я его использовал, у меня есть двойник, который я добавляю Time.deltaTime к каждому кадру.   -  person Ryan Foster    schedule 16.10.2017


Ответы (1)


В зависимости от ваших потребностей вы можете использовать Time.timeSinceLevelLoad, Time.realtimeSinceStartup (хотя вместо этого рекомендуется использовать Time.time) или, скорее всего, Time.time. Если вы используете Time.timeScale для приостановки игры, вы можете использовать Time.unscaledTime.

Разница между Time.realtimeSinceStartup и Time.time заключается в том, что Time.realtimeSinceStartup будет продолжать считать, даже если вы приостановите игру с помощью Time.timeScale. Предположение, что пользователи могут приостановить вашу игру, что может или не может остановить воспроизведение звука, поможет вам определить, собираетесь ли вы использовать какое свойство. Вы можете установить Application.runInBackground на true, чтобы получить наиболее надежные результаты, в зависимости от логики вашей игры.

person Serkan Pekçetin    schedule 15.10.2017