Я планирую разработку игры для Unity3D и пытаюсь понять, что движок уже предоставил, и что я должен написать сам.
Сама игра станет ритм-игрой, что означает синхронизацию аудио и графических событий, чтобы они всегда играли, когда они должны. Чего я хочу избежать, так это потенциального сценария отставания, когда звук или графика начинают развиваться быстрее, чем другие.
Когда мы обсуждали этот тип системы координат в моем классе игрового дизайна в университете, мой профессор назвал этот тип дизайна классом «Хронология». Идея состоит в том, что вы можете создать один или несколько из них, чтобы развиваться с разной скоростью, планировать события в будущем и синхронизировать периодические события. Тем не менее, называть это классом «временной шкалы», по-видимому, было ограничено самим моим профессором, так как поиск того, является ли определенная функция API «временной шкалой», бесполезным занятием.
Есть ли более распространенное название для такой функциональности? Есть ли в Unity какие-либо ранее существовавшие методы для координации планирования таких событий, или это такая вещь, которую нужно встроить в движок? И если это произойдет, я был бы признателен за указание на некоторые учебники!
источник
Ответы:
Хотя эта функциональность недоступна в Unity, базовая реализация такой временной шкалы не должна быть слишком сложной для выполнения.
Вот как я бы это сделал:
timeline.AddEvent(0.25f, MyCallback)
.С каждым
Update
классом временной шкалы будет:float
) на истекшее времяЕсли вам нужна какая-то функция перемотки или воспроизведения , конечно, было бы глупо удалять все события из очереди (это означает, что вам придется добавлять их снова при перемотке). Вместо этого вы также можете использовать массив, содержащий ваши события . Событие будет состоять из
Time
иCallback
. Вы должны сохранить свой массив отсортированным поTime
.Тогда вместо удаления элементов из массива вы будете отслеживать текущий индекс массива , и при каждом обновлении искать этот индекс и выполнять все обратные вызовы,
Playhead >= Time
одновременно увеличивая индекс соответствующим образом.Реализация более быстрой скорости воспроизведения работает с обеими реализациями и будет такой простой, как:
источник
Нет, Unity3D не имеет такого API из коробки.
Тем не менее, он поддерживает сопрограммы, и я предлагаю вам изучить их. Сопрограммы обычно делают планирование и синхронизацию событий действительно легкими.
источник
Я не уверен, что это новое, так как ответы в 2012 году, но на самом деле Unity действительно поддерживает контроль временной шкалы через (Legacy) Animation Editor .
Хотя эта функция предназначена главным образом для анимации параметров объекта с помощью кривых, она включает возможность запуска сценариев в событиях анимации . Эти сценарии могут управлять вашей графикой и аудио.
источник