Полезное

Мы Вконтакте

Discord канал

#
Пред.
12
Модератор: icms
Аватара пользователя
Пользователь
Сообщения: 98
Добрый день!
Изменяю положение персонажа (Character Blueprint) с помощью AddActorWorldOffset (через события Input...) и не могу получить скорость через GetVelocity->VectorLength, скорость всегда 0. Попробовал добавить физику на капсулу, при этом заблокировать повороты по осям X и Y - толку 0.
При этом в свободном падении скорость появляется.
Как можно узнать моментальную скорость Charactera без костылей (вроде ручных замеров пройденного расстояния за последний кадр)?
Аватара пользователя
Пользователь
Сообщения: 2319
ничего лучше чем мерять за последний кадр нету... если нужно.

но стандартный GetVelocity должен работать, лучше разберись почему не работает , а потом замену если она еще понадобится.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 98
Изображение
Выдает 0. Если вывести вектор - 0;0;0. И на обычном кубике с включенной физикой тоже... А вот если на него гравитация воздействует, т.е. если предмет/персонажа уронить или толкнуть, то скорость выдается. При простом движении - 0.
Это у всех так? Или я что-то не то делаю?
Последний раз редактировалось rachok 28 авг 2018, 14:09, всего редактировалось 1 раз.
Аватара пользователя
Пользователь
Сообщения: 589
Скорее всего он у тебя не движется,а тупо телепортируется в заданную точку.

Для движка он стоит на месте.
Последний раз редактировалось Agny 28 авг 2018, 14:10, всего редактировалось 1 раз.
Аватара пользователя
Пользователь
Сообщения: 98
Галочка телепорт выключена.
П.С. Я для чистоты эксперимента оставил только то, что на картинке.
Аватара пользователя
Пользователь
Сообщения: 2319
он все равно телепортируется... он и не должен возвращать скорость при таком движении.

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

нужно задавать скорость константным вектором см за секунду, и добавлять этот вектор умноженный на дельта тайм, на тике.
кароче при таком задании движения скорость тебе самому известна, ты ее задаешь.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 98
Да я в курсе, что это за кадр, если делать все верно, то это надо вектор умножить на дельту времени, и уже этот вектор толкать в функцию. Да, я буду задавать скорость, НО
я не буду знать реальной скорости объекта, если он, например, еще и падает.
Можно вычислить скорость, если каждый тик сравнивать положение тела с положением в предыдущем тике, а затем делить разницу на дельта секондс. Я так и сделал.
Но и в этом случае можно вычислить неверно, например персонаж бежит и уперся в стену: из-за небольшого заезда коллайдера на коллайдер возникает маленькое смещение и "скорость" появляется. Причем она близка к той, что я задаю на входе в AddActorWorldOffset .
Аватара пользователя
Пользователь
Сообщения: 4069
если бы движение задавалось бы другим способом, get velocity работало бы корректно, а в таком случае да, мерять растояние между кадрами, ну и мб булевую добавить для дополнительной логики.
Аватара пользователя
Пользователь
Сообщения: 98
Другим способом - это импульсом, силой или добавлением линейной физической скорости?
Все это работает, если физика включена. Персонажа, мне кажется, так двигать нельзя.
Аватара пользователя
Пользователь
Сообщения: 4069
там в любом стандартном ТПС проекте можно посмотреть ноду, также будет работать с такими нодами, как SimleMoveTo и вероятно подобными.
Также get velocity можно получить в режиме фаллинг.


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница