Полезное

Мы Вконтакте

Discord канал

#
Модератор: icms
Аватара пользователя
Пользователь
Сообщения: 589
Привет всем.

Хотел сделать сложные редактируемые комбо в своей игре.
Сижу думаю как бы это лучше реализовать.

В интернете есть примеры реализации комбо. Например вот это:
https://www.youtube.com/watch?v=8CA4e818erY
Но везде во всех видео используется только одна кнопка.
Т.е тупо жмем одну кнопку и персонаж делает комбу.

У меня должно быть как минимум две кнопки. С разными комбинациями. С возможностью подключения в процессе игры новых ударов с новыми комбинациями нажатий.

Может кто подскажет. У кого есть какие варианты.
Аватара пользователя
Пользователь
Сообщения: 4069
а что тут думать, меняешь анимации по нажатию кнопки.

В анимацию встраиваешь аним нотифи, там где должна начаться следующая анимация для комбо, аним нотифи проверяет переменную(последняя нажатая клавиша), и в соответствии с ней запускается новая анимация.
Дальше уже детали, например сколько времени в памяти держать последнюю нажатую кнопку, можно вообще записать в стринг(или в массив) все нажатия клавиш в последовательности, а потом читать из него.
Суть проста, - аним нотифи проверяет переменную и меняет(или не меняет) анимацию. Все остальное детали. Также в анимации может быть несколько аним нотифи, хотя это маловероятно, лучше делать все из маленьких частей.
Естественно понадобится порезать на части, длинные анимации - комбо.

Для такой идеи сложно подготовить анимационную базу, здесь суть тоже простая, стартовая позиция следующей анимации, должна совпадать с конечной позицией, там где анимнотифи.
Таких анимацией может быть множество, главное что бы они начинались с одной позиции.
Пример, после удара левой рукой, следующая анимация может быть какой угодно, но в 0 кадре она равна тому кадру где установлен аним нотифи(это если скорость блэнда будет равна 0).

Можно работать с длинными анимациями, и указывать стартовую позицию, но это жесть как не удобно, лучше порезать их на части.

Алгоритм не сложный, но он может быть сложным, в зависимости от количества вариантов твоих комбо.
Как ты это все отсортируешь в своей голове, от этого зависит удобство.
Для начала на бумаге, запиши для каждой анимации связей одной анимации с другими. Определи максимальное количество ударов в комбо.

Для сложной системы комбо, предлагаю такие переменные.

Енуменатор(StartCombo) - для стартовой комбы, там пропиши, например прямой левой рукой, прямой правой рукой, боковой левой ногой и т.д., постепенно будешт расширять. Это тебе может пригодится для дальнейшей логики.

Интежер(CurrentStrike) - для текущего удара в комбе. Здесь логика может быть такая, если старт комбы левый прямой, то макимальное количество ударов после него может быть 5, а например для левого бокового ногой три, знать текущее значение удара в комбо будет нужно.

Енумератор(LastKey) для хранения в памяти последней нажатой кнопки, пропиши в него АБСД например. Определи будет ли это перезаписываться, или добавлятся в масив, и сколько хранится в памяти, время хранения может варьироваться, от текущей анимации, а может и не хранится, определять прямо, нажато - значит нажато. В персонаже рекомендую добавить такую функцию для удобства - https://picua.org/images/2020/01/03/dd0 ... ddda45.png


Енумератор(NextCombo) - перечень всех анимаций анимаций во всех комбо(всех кусочков). С этим тебе в основном и работать, в аним блюпринте этот енуменатор примерно будет выглядеть так - https://picua.org/images/2020/01/03/b0b ... 96366e.png



Аним нотифи проверяет StartCombo, CurrentStrike, NextCombo, LastKey и меняет cоответственно NextCombo, NextCombo может быть как следующим ударом, так и завершением комбо без удара, если клавиша не нажата, или лимит комбо исчерпан.

Можно добавить еще переменную CurrentCombo, тип данных что и NextCombo, но это наверно лишнее, это для еще более сложной системы.


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

p.s. если тебе нужно проигрывать одну и туже анимацию, но без цикла, с прерыванием и блэндом, тогда прийдеться продублировать стэйт, и NextCombo - https://picua.org/images/2020/01/03/861 ... 0fcd38.png.

Не забудь отключить loop всем анимациям(кроме тех случаев где это необходимо) - https://picua.org/images/2020/01/03/dc4 ... 73f05c.png

Логика в кратце, нажал А, запустилась анимация прямого удара прямой.
StartCombo = LeftHandPunchStart
CurrentStrike = 0
NextCombo = LeftHandPunchStart

Сработал Аним нотифи, проверить вышеуказанное, проверить текущее нажатие клавиш, CurrentStrike + 1(или обнулить), поменять NextCombo.
Можно сделать два стэйта, в одном будут начала комб, а в другом все остальное.
Тогда начало будет выглядить так

StartCombo = LeftHandPunch
CurrentStrike = 0
NextCombo = None

Я думаю все можно сделать в одном стэйте с помощью одного енуменатора.
Также можно смешивать анимации между собой, но в таком случае качество будет на три порядка ниже, лучше подготовить большую анимационую базу из маленьких кусочков, но самодостаточных.
Аватара пользователя
Пользователь
Сообщения: 589
Долго думал. И вот придумал:

Изображение

Используется AnimMontage. Хотел как можно компактнее сделать.
Первая структура запоминает какую кнопку я нажал. До востребования когда происходит переключение ударов.
Можно ,конечно, обойтись без структуры. Но я её сделал потому что планирую добавить ещё нажатие кнопок направления.

А вторая структура используется в массиве.
Принцип такой. Первая - нулевая строка массива в структуре пустая.
Во вторую под индексом один вписана простая комбо типа Рукой, Рукой, Рукой. Или Ногой, Ногой, Ногой.
В третью под индексом два вписано ответвление. Допустим Рукой, Рукой, Ногой, Ногой.
Конечно их может быть сколько угодно.

В структуре из массивов Punch и Kick считывается просто информация на какую строчку с каким индексом нужно переходить при следующем ударе.
Смотря какую кнопку нажимаешь.

Аним нотифи сделаны такие же как в видеоуроке.
Аватара пользователя
Пользователь
Сообщения: 4069
можно сказать, у каждого свой подход и стиль)), но смотреть уроки как сделать то что умею, я бы не стал.
В смысле все инструменты которые есть в видео, думаю тебе известны давно, и сложной математики нет.
Аватара пользователя
Пользователь
Сообщения: 138
Agny писал(а):
Долго думал. И вот придумал:

что-то очень сложно,
я более-менее успешно делал комбо систему на 3 кнопки, (без запоминания последовательности нажатий)

работало примерно так:
кнопка 1 рука
кнопка 2 нога
кнопка 3 захват\контратака

любая из них начинает свой аниммонтаж (монтаж поделен на секции - замах-нанесение урона-востановление) во время воставновления нажатие кнопок атаки перекинет вас в следующий монтаж в зависимости от нажатой кнопки и предыдущей анимации или анимации противника если была нажата контратака в момент замаха противника (по моим ощущениям достаточно 3-4 видов анимации под каждую кнопку чтобы бой смотрелся разнообразно)
для большего контроля над боем желательно также учитывать направления для ударов (типа стрелка вверх+рука-апперкот, вперед + нога - пинок прямо)

для всего этого надо по 1 булу на кнопку + енум с направлениями
Аватара пользователя
Пользователь
Сообщения: 589
jeka3d писал(а):
что-то очень сложно,
я более-менее успешно делал комбо систему на 3 кнопки, (без запоминания последовательности нажатий)

(по моим ощущениям достаточно 3-4 видов анимации под каждую кнопку чтобы бой смотрелся разнообразно)



Я тоже раньше просто делал. При нажатии у меня последний удар(концовка комбы) только выбиралась в зависимости от нажатой кнопки.

Но потом почитал в интернете на форумах. И понял что есть запрос у любителей файтингов на такую игру в процессе которой можно было бы комбы прокачивать. По принципу - шел,шел, встретился на пути учитель и научил тебя новым ударам. И ты пошел дальше драться...

Вот и пришел я к такой сложной системе.


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница