Как я могу реализовать функцию ускоренной перемотки для моей игры Tower Defense, как в http://fieldrunners.com/ и других играх TD?
Я использую Unity 3D. Будет ли что-то для управления меньшим количеством кадров в секунду или какая-то ручная установка быстрого движения врагов и скорости стрельбы из башни, и так далее?
unity
tower-defense
timing
Сайед
источник
источник
Ответы:
если в вашей игре нет сложных или дорогих в вычислительном отношении симуляций, требующих разделения их на независимые временные рамки обновления, вы можете использовать простой подход, основывая код в ваших
Update()
функциях на значении Unity Time.time, а в вашем коде установите значение Time .timeScale будет тем, что вы хотите. 0 == приостановлено, 1 = нормально, наши тестировщики любят устанавливать timeScale> 1 для ускорения работы.http://unity3d.com/support/documentation/ScriptReference/Time-timeScale.html
источник
Подход: более высокая скорость моделирования
Время вашего пользовательского интерфейса должно быть отделено от вашего реального игрового цикла, как и ваш рендеринг. Скажем, например, ваш мир движется со скоростью 4x. Допустим, что при вашей базовой (1x) скорости ваша игра запускает 30 обновлений в секунду.
После этого в режиме ускоренной перемотки вы получите что-то вроде следующего:
Другими словами, игра в целом не работает быстрее. Симуляция часть.
Вы можете вывести две вещи из этого:
Вы должны сохранять свою игровую логику достаточно простой, чтобы вы могли легко запускать ее в четыре раза быстрее на целевой платформе, ИЛИ вам нужно вводить методы для более быстрой экстраполяции различных аспектов игрового процесса - однако это может привести к модели, которая отличается от того, что было бы, если бы вы просто использовали более быстрый темп моделирования. Таким образом, компромиссом будет стоимость обработки для точности. Смотрите подход 2 ниже.
Именно разделение интересов позволяет вам легко ускорить симуляцию мира, причем это разделение представляет собой модель, представление и контроллер ( MVC ). Если ваши мировые данные (M), логика рендеринга (V) и игровая логика (C) смешаны, вы действительно не сможете сделать это, по крайней мере, без массовой мигрени.
Подход: экстраполяция на основе дельт времени
Как уже упоминалось выше, вам нужно рассчитать движение на основе того, как далеко что-то должно было бы пройти в данный момент времени. Это предполагает, что физика вашей игры по своей природе более реалистична, однако это может быть не так. Это довольно обширная тема и значительно более сложная. Вам нужно будет задать больше вопросов, если вы хотите знать. По сути, вы будете делать некоторые исчисления, чтобы все было правильно. Вам придется иметь дело с взаимопроникновением при столкновениях и множеством других вопросов, которые я не буду здесь рассматривать.
Заключить
Это дает вам общий план. Вы выбираете язык самостоятельно, возможно, вы либо знаете, как это сделать в Unity, либо нет. Время на любом языке требует от вас детального понимания всех деталей, я бы предложил начать со статей Гаффера и ознакомиться с документацией по Unity API.
источник
Как правило, обновление игровой логики должно быть отделено от обновления игровой графики, то есть симуляция вашего игрового процесса, AI, движения юнитов и так далее не должна быть привязана к скорости, с которой игра рендерится. , Обычно основной игровой цикл вычисляет, сколько времени в реальном времени прошло с момента последнего обновления игры, и отправляет этот шаг дельта-времени в процедуры обновления каждого отдельного игрового логического объекта.
В таком случае становится просто реализовать масштабирование времени (включая ускоренную перемотку) в вашей игре. Просто умножьте временной шаг логики игры на какое-то скалярное значение, которое определяет, сколько будет «ускоряться» или замедляться. По умолчанию это значение равно единице, и, например, когда пользователь нажимает клавишу «ускоренная перемотка вперед», вы устанавливаете его на 1,5, и все моделирование будет выполняться на 50% быстрее. Однако вы все равно будете рендерить с той же скоростью.
Я не очень хорошо знаком с Unity и, следовательно, могу ошибаться в следующем предложении, но в Unity есть компонент управления временем, который может быть полезен для реализации этого. На самом деле он уже имеет свойство временной шкалы. Описание компонента подразумевает, что класс был разработан для физических объектов, но он также может быть применим к вашему сценарию.
источник