Анимация подъема по карнизу и движение (2-й платформер)

11

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

Насколько я понимаю (любитель здесь не профи), есть несколько вариантов, в том числе:

  1. Приложите контролируемое усилие к твердому телу на оси y, пока положение корня не окажется чуть выше положения руки, затем приложите достаточное усилие к оси x, чтобы персонаж стоял на платформе. В то же время, каким-то образом синхронизировать это с анимацией подъема.

    Замечания : движение здесь легко и даже может управляться призматическим скользящим соединением, но я не уверен, как бы я синхронизировал анимацию (позвоночник) с движением.

  2. Корневая анимация движения, которая управляет корневой позицией персонажа. По завершении телепортируйте твердое тело, и надеюсь, что box2d все равно сможет своевременно отреагировать на любое столкновение, если какие-либо объекты упадут с неба.

    Замечания : звучит проще для анимации, но я не уверен, что у меня возникнут какие-либо проблемы со временем выполнения позвоночника, box2d или более поздней версией движущихся платформ и платформ различной высоты.

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

    Замечания : кажется, что это дало бы максимальный контроль над игроком, но для меня это сложно сделать на моем уровне, не совсем уверенный, с чего начать.

Спасибо заранее за любые данные!

К вашему сведению: это движок на базе ECS (libgdx + ashley) с box2d. Захват уступа уже реализован как отдельная система, поэтому мы можем предположить, что персонаж уже способен висеть на выступе любой высоты.

Адриан
источник

Ответы:

1

Я считаю, что вам нужно больше вариантов дизайна, прежде чем вы сможете принять правильное решение, в частности, что может случиться с персонажем, когда он висит / лазает?

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

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

Тогда все, что вам нужно сделать, это вернуть состояние вашего персонажа в режим ожидания после завершения анимации лазания.

Брайан Х.
источник
0

Вы можете просто переместить transform.y вверх n раз до тех пор, пока ноги не окажутся на выступе, и временно забыть физику, я думаю, что она будет работать нормально, вы всегда можете измерить расстояние между падающими объектами и игроком в случае сбоя столкновения во время трансформационный перевод. чтобы убедиться, что происходит столкновение ..

Джо Шмоэ
источник
0

Если игрок прижимается к предмету, на который можно подняться, то перемещайте его вверх / вниз по оси Y. Во время этого состояния убедитесь, что он не может двигаться по оси X. По мере движения вы можете вызывать Animation.Sample для анимации набора высоты, чтобы убедиться, что точка анимации соответствует пройденному расстоянию, а не пытаться рассчитать все.

Питер Моррис
источник
0

На мой взгляд, «лучшим» способом было бы: Когда вы обнаружите, что лазание возможно, временно заблокируйте положение игрока. Используйте анимацию с корневым движением и заблокируйте элементы управления. Когда анимация закончится, разблокируйте положение игроков и элементы управления.

Конечно, если вы сделаете это безрассудно, это будет выглядеть странно ИЛИ это потребует идеальной точности пикселей. Но вы можете избежать этого - дайте игроку некоторый диапазон, где он может подняться, и с помощью рывка быстро отрегулируйте положение до идеального места.

lilKriT
источник
0

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

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

Агент Тацу
источник