Unreal Engine 4
http://uengine.ru/forum/

Механика поведения персонажа из TeeWorlds
http://uengine.ru/forum/viewtopic.php?f=3&t=12815
Страница 1 из 2

Автор:  joylz [ 05 дек 2017, 20:49 ]
Заголовок сообщения:  Механика поведения персонажа из TeeWorlds

Всем привет. Уже много дней сижу над построением логики/физики главного персонажа.
А точнее над реализацией хука.
Вот ссылка для наглядности
https://youtu.be/m4VyCwH4UJs
И так, я получил координаты сцепления хука с поверхностью через Line Trace
Изображение
После этого блока из выхода должна выходить информация о положении персонажа.
Основная особенность механики
-Если не жать клавиш движения вперед/назад он полетит по данной траектории(синий - хук, красный - вектор движения, до столковения с землей)
Изображение
При нажатии кнопки вправо он начнет как бы описывать круг вокруг точки прикосновения. Это очень важно. Как только клавиша отпускается у персонажа, если начал уже то самое описывание круга, скорость обода уменьшается.

Был вариант создать Spring Arm, прикрепить и указывать координаты вращения, но в таком случае персонаж двигается статично/ровно
Launch Character задает импульс для персонажа - высчитывания координат для нормального движения анриал
Ещё был вариант через тайм лайн, но в таком случае у него всегда будет одинаковая амплитуда

Я лазил в исходнике игры, но там я не нашел нечего ценного для решения проблемы. Если нужно прикреплю, код на C++

Подскажите на ход мыслей - я не знаю, что можно ещё придумать(

Автор:  Snake [ 08 дек 2017, 00:22 ]
Заголовок сообщения: 

физический движек если использовать?
если нет то тогда гуглим - физика маятник.

Автор:  joylz [ 09 дек 2017, 01:34 ]
Заголовок сообщения:  Re:

Snake писал(а):
физический движек если использовать?
если нет то тогда гуглим - физика маятник.

С физикой не получится, и с Physics Constraints Actors тоже не выйдет.
Нужно рассчитывать не только притягивание, но и момент закручивания.
Я думал над тем, чтобы отключать гравитацию и применять к мовмент моду функцию Launch Character.
А при зажатии соответствующих кнопок для коррекции направления (A - влево, D - вправо) ускорять чаректора в соответсвующем направлении. Таким образом, по задумке, персонаж начнет закручиваться (когда вектор направления по горизонтали сильнее вектора во вертикали)

Автор:  icms [ 09 дек 2017, 02:28 ]
Заголовок сообщения: 

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

Автор:  Snake [ 09 дек 2017, 07:27 ]
Заголовок сообщения: 

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

Автор:  joylz [ 10 дек 2017, 03:18 ]
Заголовок сообщения:  Re:

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

Маятник не подошел, потому что на большой скорости хук растягивается. А у Physics Constraints ограничивается область - он скрепляет как цепь.
Математически - я не нашел способ это сделать.
У меня такие непонятности:
-Уменьшать ли скорость притягивания у Launch Character когда длина цепи слишком большая? Или всегда равна одному числу?
-После того как применяю импульс происходит резонанс в самой точки относительно оси X, чего точно не нужно. Если брать обратный импульс для торможения - как узнать когда его нужно применять.
-При зажатии клавиш этот самый импульс по оси Х(имхо) должен усиливаться в указанную сторону, или снижаться, если зажата противоположная клавиша.
Вся суть этой баллады в том, что нужно не просто притягивание под нужным углом, а ещё и закручивание, если персонаж уже двигался в этом направлении или зажал кнопку в этом направлении.

Увы у меня не получается вывести эту формулу уже около 2х недель

Автор:  Prytaleks [ 10 дек 2017, 12:54 ]
Заголовок сообщения: 

есть еще AddForce, это вроде импульса, но действует мягко.

Автор:  Snake [ 10 дек 2017, 13:30 ]
Заголовок сообщения: 

Цитата:
Математически - я не нашел способ это сделать.

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

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

не тянет на сверх задачу... что конкретно не полусается?

Автор:  joylz [ 10 дек 2017, 15:27 ]
Заголовок сообщения:  Re:

Prytaleks писал(а):
есть еще AddForce, это вроде импульса, но действует мягко.

Да, но он работает только с включенной физикой. При включении физики мовмент контрол теряется

Автор:  joylz [ 10 дек 2017, 15:57 ]
Заголовок сообщения:  Re:

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

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

не тянет на сверх задачу... что конкретно не полусается?


Он крутится не просто по кругу, а с уменьшением радиуса. Или увеличивается если слишком большая скорость. Если не нажаты клавиши движения и персонаж стоит на месте - он просто притянется в заданную точку, без кружения. Если разогнаться, то его закрутит. ПРИЧЕМ - Нужно жать соответствующие движению клавиши направления (A или D). Если не будет такого, то сила угаснет и он притянется.
И постоянно мешает резонанс. Его нужно как-то останавливать.
Какую именно силу прилагать тоже не знаю, как можно угадать направление если на перса действет гравитаия, аир контрол чарактера(управление в воздухе) и его текущий импульс

Я скорее всего не понял как вы хотели сделать маятник. С помощью того компонента, о котором я говорил раньше такое дело не провернешь.

Изображение
Изображение
Изображение
Изображение
Те же, только ссылками
http://s1.uploadpics.ru/images/-J8VjJ5VlX.png
http://s1.uploadpics.ru/images/b1soik54eX.png
http://s1.uploadpics.ru/images/ZynZ-gcNem.png
http://s1.uploadpics.ru/images/b1UfYx54lX.png

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/