Як я можу реалізувати у своїй грі функцію "швидкий рух вперед"?


15

Як я можу реалізувати функцію швидкого перемотування вперед для моєї гри в оборону вежі, як в http://fieldrunners.com/ та інших іграх TD?

Я використовую Unity 3D. Чи було б щось для управління меншою кількістю кадрів в секунду або якийсь ручний встановлений швидкий рух ворогів і швидкість стрільби з башти тощо?


Ви намагалися збільшити частоту оновлення ?? вам може знадобитися пропустити кадри ..
concept3d

Відповіді:


7

якщо у вашій грі немає складних або обчислювально дорогих симуляцій, які потребують розділення їх на незалежні строки оновлення, ви можете використовувати простий підхід, заснований на коді у вашому Update() функціях на значенні Time.time Unity, а у своєму коді встановіть значення Time .timeScale бути будь-яким, що ви хочете. 0 == призупинено, 1 = нормально, наші тестувальники люблять встановлювати timeScale> 1, щоб швидше це зробити.

http://unity3d.com/support/documentation/ScriptReference/Time-timeScale.html


18

Підхід: Більш висока швидкість моделювання

Терміни для вашого користувальницького інтерфейсу слід від’єднати від фактичного циклу гри, як і вашого рендерінгу. Скажімо, наприклад, що ваш світ працює на 4х швидкості. Скажімо, що при вашій базовій (1х) швидкості ваша гра працює 30 оновлень в секунду.

Потім у режимі швидкого перемотування у вас з’явиться щось на кшталт наступного:

  • Світова логіка виконує 4 оновлення для кожного оновлення інтерфейсу користувача та візуалізації. Це означає, що йому потрібно запустити 120 оновлень в секунду. Таким чином, ваша світова модель (дані) оновлюється з такою швидкістю.
  • Логіка рендерінга та інтерфейсу користувача продовжує опитувати або робити що-небудь із 30 оновленнями в секунду.

Іншими словами, гра в цілому не працює швидше. Симуляція частина.

З цього можна вивести дві речі:

  1. Вам потрібно тримати свою логіку гри досить простою, щоб ви могли її легко запустити в чотири рази швидше на своїй цільовій платформі, АБО вам потрібно швидше впровадити методи для екстраполяції різних аспектів ігрового процесу - проте це може призвести до моделі, яка є відрізняється від того, що було б, якби ви просто використовували більш швидкий темп моделювання. Таким чином, компроміс буде обробкою витрат на точність. Дивіться підхід 2 нижче.

  2. Саме розділення проблем дозволяє легко пришвидшити своє моделювання у світі, і це модель, перегляд та контролер ( MVC ). Якщо ваші світові дані (M), логіка візуалізації (V) та логіка гри (C) змішані, ви дійсно не зможете цього зробити, принаймні, не без масивної мігрені.

Підхід: Екстраполяція на основі часових дельт

Як було сказано вище, вам потрібно буде обчислити рух, виходячи з того, як далеко щось би проїхало за певний час. Це передбачає, що фізика ігор по своїй суті є більш реалістичною в їх моделюванні, але це може бути не так. Це досить велика тема і значно складніша. Вам потрібно буде задати більше питань, якщо ви хочете знати. По суті, ви будете робити певні обчислення, щоб все виправити. Вам потрібно буде розібратися з взаємопроникненням у зіткненнях та низкою інших питань, я не заходжу тут.

Щоб зробити висновок

Це дає вам загальний контур. Вибір мови - ваш власний, імовірно, ви або знаєте, як це зробити в Єдності, або не знаєте. Час на будь-якій мові вимагає, щоб ви детально зрозуміли внески та виходи, я б запропонував почати зі статей Gaffer і перевірити документи Unity API.


Якщо ви збираєтесь використовувати підхід із швидкістю моделювання та хочете підтримати уповільнення , вам, ймовірно, потрібно мати надзвичайно повільну базову швидкість моделювання, а потім запустити це за замовчуванням приблизно як 100 кроків / кадр моделювання.
bobobobo

9

Як загальний принцип, оновлення логіки гри слід від'єднати від оновлення графіки гри - тобто моделювання вашого ігрового процесу, AI, руху одиниць тощо, не повинно бути прив'язане до швидкості, з якою гра відображається . Зазвичай основний цикл гри обчислює, скільки часу минуло в реальному часі з моменту останнього оновлення гри, і надсилає цей крок часу дельти до процедур оновлення кожного логічного об’єкта гри.

У такому сценарії стає простою реалізацію масштабування часу (включаючи швидку перемотку) у вашій грі. Просто попередньо помножте крок часу на логіку гри на якесь скалярне значення, яке керує тим, наскільки "швидко перемотати" або сповільнити час. За замовчуванням це значення буде одним, і, наприклад, після натискання користувачем клавіші "швидкого перемотування вперед" ви встановите її на 1,5, і, здавалося б, все моделювання піде на 50% швидше. Однак ви все одно будете рендерувати з тією ж швидкістю.

Я не дуже знайомий з Unity, і тому я можу помилитися в наступній пропозиції, але Unity має компонент управління часом, який може бути корисним для його реалізації. Насправді це вже властивість часового масштабу. Опис компонента означає, що клас був розроблений для об'єктів фізики, але він може бути застосовно і до вашого сценарію.


1
Це безумовно застосовно до його сценіорі. Все, що йому потрібно буде зробити, це встановити Time.timeScale на якийсь множник, і все просто піде швидше. Це всебічна зміна, тому, якщо є такі речі, як взаємодія меню, і вони також будуть швидше працювати.
Тетрад

thnx знову Tetrad :)
Відбувся
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.