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