Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Актер на сфере.
#2
В общем случае нужно получить нормаль поверхности под ногами персонажа и присвоить ее вектору Up:

Код:
[== C++ ==]
ux = ObjectGetAbsoluteUp(character, 0);
uy = ObjectGetAbsoluteUp(character, 1);
uz = ObjectGetAbsoluteUp(character, 2);
if (ObjectRaycast(characterPointerDown, planet))
{
    ux = ObjectGetCollisionNormal(0);
    uy = ObjectGetCollisionNormal(1);
    uz = ObjectGetCollisionNormal(2);
}
ObjectSetAbsoluteUp(character, ux, uy, uz);

characterPointerDown в данном случае - это даммикуб, привязанный к персонажу и повернутый вниз на 90 градусов:

Код:
[== C++ ==]
characterPointerDown = DummycubeCreate(character);
ObjectPitch(characterPointerDown, -90);

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

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


Сообщения в этой теме

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)