Полезное

Мы Вконтакте

Discord канал

#
Пред.
Модератор: Di-Crash
Аватара пользователя
Пользователь
Сообщения: 21
Доброго времени суток. Ранее при обучении работе с UE4 я создавал BlendSpace анимации основанные на Speed и Direction компонентах. Казалось бы всё просто, вычисляем скорость, вычисляем угол движения относительно нашего павна и вуаля, получались гладкие и ровные смешивания анимаций. Здесь же на форуме мне посоветовали сделать свою маленькую игру для того что бы пройти весь путь от начала и до конца, и я решил начать с самых азов.
При попытке сделать плавные переходы анимаций путём BlendSpace я получаю непонятные рывки и резкие переходы при движении персонажа назад, или вообще в любую сторону кроме как вперёд. Я долго мучился пытаясь понять где допустил ошибку, и вот обнаружил, что ошибка кроется в Calculate Direction. При вычислении направления движения UE4 выдаёт мне что при движении вперёд направление соответствует 0-му градусу, что верно, но при движении ровно влево относительно камеры, или вправо относительно камеры направление не -90 и +90 градусов, а -84 и +84, а при движении назад не -180 и +180 а -175 и +175, причём ошибка увеличивается при уменьшении FPS вплоть до 20 грудосв, при 30 FPS.
Я опробовал два разных метода вычисления градуса и они оба выдают градус направления с погрешностью, пожалуйста ткните меня носом где я ошибаюсь я очень хочу понять.
(На скринах ниже представлены два метода которыми я вычислял угол направления, и то что происходит в игре при движении назад, анимаиции в принципе поехали главное это цифры)
[url] https://ibb.co/iPFigS
https://ibb.co/hmLigS
https://ibb.co/b0tfT7
https://ibb.co/b4pn87 [/url]
Аватара пользователя
Пользователь
Сообщения: 589
Картинка не моя. Но я так делал.

http://picua.org/img/2018-02/12/fp12kt8 ... o47vpd.png

У меня тоже дает значение с погрешностью. Но на анимацию как то не влияет.
Аватара пользователя
Пользователь
Сообщения: 21
Везёт( А можешь показать BlendSpace?
Аватара пользователя
Пользователь
Сообщения: 21
Это какой-то бред, я нашёл бэкап старого проекта, в нём реализована всё та жа система, такая же как у Agny и такая же как у меня и там всё высчитывается без погрешностей... я наверное схожу с ума.
Аватара пользователя
Пользователь
Сообщения: 21
Я смог избавиться от погрешности вычислений, найдя пример на иностранных ресурсах, однако почему то по прежнему при движении персонажа назад его анимацию колбасит и она постоянно мерцает между различными близкими положениями, пока не смог разобраться почему, если куму нужно прикладываю BP с моим решением.
https://ibb.co/gmkQD7
Аватара пользователя
Пользователь
Сообщения: 2319
ну хотя бы:
1 - не строить ротатор из ненормализованных векторов (* )
2 - в такой конструкции вектор скорости для сравнения не в горизонте, и при нормализации ротатора может неправильно считать Z
3 - векторы известны, нужно выровнять скорость в плоскость горизонат, нормализировать и посчитать угол между векторами, ротатор для этого вообще не нужен.

P.S.: по первому пункту глянул исходники... нормализация внутри функции...

хотя название функции makefromX предполагает что X уже должен быть нормализованным,...
на мой взгляд она там лишняя - очередной предохранитель чтоб в ногу себе не выстрелить...
_________________
we need to go deeper
Последний раз редактировалось Snake 13 фев 2018, 10:45, всего редактировалось 3 раз(а).
Аватара пользователя
Пользователь
Сообщения: 2319
а вообще вот такую функцию сделать,
Изображение
потому что посчитать угол между векторами задача довольно регулярная
и если подставить сюда что нужно - вполне подходит.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 4069
анимацию может колбасить по разным причинам, как резкая смена значений в блэндспэйсе, так и от переходов между стэйтами, так и от других причин. Все эти причины можно объединить в одну причину - неверная логика.

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

http://picua.org/img/2018-02/13/frapbot ... v15o0o.png

на всякий случай еще один скрин в помощь, подключи к этим нодам TryGetPawnOwner
http://picua.org/img/2018-02/13/1bfigkz ... jnhcrj.png
Аватара пользователя
Пользователь
Сообщения: 4069
Снэйк объясни мне пожалуйста, что значит "нормализовать"(Normalize), для чего это нужно?, желательно хотя бы с устным примером.
Аватара пользователя
Пользователь
Сообщения: 2319
Prytaleks , чтоб ветор стал длиной в 1 юнит(см в анриале)
пример: померять угол между веторами, длина векторов не влияет на угол:
acos(dotproduct(normalize(V1),normalize(V2)))
и при ненормализованных векторах это не будет работать корректно.
по сути пропорциональное изменение XYZ вектора так чтоб выполнялось равенство X^2+Y^2+Z^2=1
_________________
we need to go deeper
Последний раз редактировалось Snake 13 фев 2018, 10:55, всего редактировалось 3 раз(а).


Сейчас этот форум просматривают: Google [Bot] и гости: 26

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