Как я могу заставить персонажа стоять на склонах?

8

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

Мне интересно, как правильно сделать шаг персонажа на склоне, давайте начнем с двух скриншотов игры Limbo, чтобы показать вам, что я имею в виду: Главный герой в подвешенном состоянии, стоящий на склоне Лимбо главный герой стоит на ровной площадке
Итак, как вы можете видеть на этих рисунках, это похоже на позвоночник персонаж на самом деле перпендикулярен горизонту, а не поверхности земли, и это наблюдение приводит меня к моему вопросу:
как вы можете воспроизвести такое поведение с помощью Sprite Kit? Потому что, если я присоединяю физическое тело к узлу, у меня есть возможность позволить ему вращаться, поэтому я получу что-то вроде этого: Мы можем видеть, что спрайт следует за землей, на которой он стоит, поэтому ноги персонажа находятся на полу, но его позвоночник не перпендикулярен горизонту, а больше к земле.

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

Любые идеи ?

Тревор
источник
1
Попробуйте сами стоять на склоне и посмотрите, как это происходит. Когда вы ставите одну ногу впереди другой, то ногу выше следует согнуть, чтобы компенсировать уклон. Таким образом, ваш подход с несколькими суставами является хорошим вариантом.
Eejin
@Eejin Хорошо, спасибо, а как насчет графического реализма на уровне суставов? Что я могу сделать, чтобы связать их естественно? Чтобы это не выглядело так, как будто есть несколько узлов?
Trevör
Это зависит от некоторых аспектов вашей игры. Конечно хорошо нарисованные части тела помогают. Не могли бы вы дать немного больше информации о размерах и важности идеальной детализации?
Eejin
Если ваша земля всегда, скажем, высокая трава, то можно просто использовать нижнюю точку спрайта, поскольку ноги персонажей будут скрыты до такой степени, что вы не сможете определить, как они стояли.
JZX
Я не знаю насчет SpriteKit, но многие игры представляют игрока в форме «капсулы» или «пилюли», а не прямоугольника. Также физический объект обычно меньше самого спрайта.
Тейн Бримхолл

Ответы:

6

Чтобы расширить ответ Джоша Петри, найти угол наклона стопы также довольно просто.

введите описание изображения здесь

Угол наклона ножки равен углу наклона поверхности. Поскольку у нас удобно две точки на этом склоне, мы можем найти угол наклона (также можно использовать два угла треугольной формы склона, но постепенные уклоны могут быть слишком сложными; для холмистой местности это лучшее решение). В конечном итоге наклон будет H / P (при условии, что пятка согнутой ноги находится непосредственно под соответствующим бедром), или arctan (H / P) rad. Используя косинусы, легко найти, что H = (F + T) - (Fcosθ + Tcosφ).

Угол ступни становится арктаном ((F (1-cosθ) + T (1-cosφ)) / P)

PS: Если вы хотите ДЕЙСТВИТЕЛЬНО войти, вы также можете найти добавленную ширину для P.

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

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

| grad
источник
5

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

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

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

IK часто выражается как трехмерная проблема, но его можно относительно легко уменьшить до двумерного пространства. В 2D вам не нужно возиться с почти таким же количеством ограничений вращения, чтобы создать реалистичное движение, как в 3D, что приятно.

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


источник