Тож я зіткнувся з проблемою в грі, над якою працюю, але, здається, це досить принципова річ, яка, ймовірно, виникає у багатьох іграх.
Моя гра вимагає, щоб певна функція гри відбувалася в дуже конкретний момент часу під час анімації персонажів. І тому, як видно з назви, мені цікаво, які існують хороші прийоми та основні стратегії для синхронізації пов'язаних з ігровим процесом подій / функцій / дій до конкретних моментів анімації персонажа.
Ось кілька простих прикладів того, про що я говорю в різних видах ігор:
Ваш персонаж перезаряджає свою зброю в шутер . Ваш персонаж відтворює свою анімацію "перезавантажувати", але важливо, щоб функція, яка встановлює змінну currentAmmo, була викликана лише в той момент, коли журнал поміняється, і пістолет буде знятий. Це може бути якийсь момент в середині анімації перезавантаження.
У покроковій RPG ваші персонажі стоять у лінії, що стоїть на лінії ворогів. За командою атакувати, один з ваших персонажів бігає / стрибає до одного з ворогів і розбиває їх гігантським мечем, перш ніж бігти / стрибати назад на своє стояче місце. Ви хочете переконатися, що ворог пошкоджений в той самий момент, коли відтворюється анімація косоутворення - якийсь момент між бігом і бігом назад.
У грі на стелс ваш персонаж може підкрадатися та взаємодіяти з комп'ютерами та кнопками у світі. Можливо, є кнопка, яка вимикає джерело живлення для вогнів застави, в яку ви проникли. Після натискання кнопки дії ваш персонаж простягається і натискає кнопку, а потім повертається в режим очікування. Ви хочете, щоб індикатори вимикалися в точній точці анімації "push_button", коли натискається кнопка.
Справді, мій конкретний випадок найбільше схожий на другий приклад , в якому я створив анімацію, коли мій покроковий персонаж вискакує вперед під час нападу, і я хочу, щоб шкода була нанесена саме в той момент, коли анімація, здається, контактує . Оскільки моя гра з використанням покрокової системи (уявіть щось на кшталт Final Fantasy або Fire Emblem) я хочу пошкодження / загоєння / магії / тощо. застосовуватись у потрібний час під час кожної анімації символів, хоча я насправді не використовую зіткнення / хітокси.
Я мушу зазначити, що я роблю свою гру в популярній ігровій машині, і саме зараз я обробляю це за допомогою їх анімаційних подій або сповіщаю, щоб досягти чогось близького до бажаних результатів - мій персонаж виконує певну команду і запускає специфічна для команд анімація (тобто: 'attack_command') та активи анімації для кожної з моїх команд повинні включати в себе подію анімації / повідомлення "зворотний виклик" у функції моїх персонажів ExecuteCommand. Іншими словами - персонаж повідомляє анімації атаки грати, а потім анімація атаки випромінює події / повідомляє зворотний виклик персонажу в той самий момент під час анімації, коли шкода повинна бути завдана.
Чесно кажучи, це працює зараз, але це просто не так - наче я тут пропускаю частину більшої картини! Частина причини, по якій цей метод відчуває себе неправильно, полягає в тому, що він поєднує логіку гри з активами анімації; якщо мій ресурс анімації забуде включити подія / зворотний виклик ExecuteCommand (), команда не буде виконуватись належним чином і потрібен додатковий код, щоб перевірити, чи закінчена анімація команд без виконання команди. Це безладно, і це означає, що мій геймплей має дивну залежність від його активів. Звичайно, я хочу, щоб ушкодження траплялися в певний момент під час моєї анімаційної атаки, але я відчуваю себе дуже дивно, як називати ігровий код всередині анімаційних активів.
То що я тут оглядаю? Які хороші загальні методи поводження з такими типами ситуацій, в яких ви хочете, щоб певні важливі ігрові дії відбувалися в певний час під час анімації?
Редагування: Для уточнення, це не специфічне для двигуна питання, і я не шукаю конкретні конструкції / методи двигуна. Мене цікавлять загальні методи синхронізації анімації / ігор, які можна використовувати у ваших ігрових проектах незалежно від використовуваних технологій.