Когда подбираешь всё, что не прибито: добавляем физику предметам в Unreal Engine
Простой способ добавить физическую динамику предметам на персонаже
Телеграмм канал про анимацию
Идём в Skeletal Mesh персонажа.
Skeletal Mesh это 3D-модель, привязанная к скелету. Благодаря костям её можно анимировать и деформировать.
1. Выбираем кость
Выбираем кость, к которой хотим привязать предмет. Например, Spine_04.
2. Создаём Socket
Socket специальная точка привязки на кости или меше (mesh), к которой можно прикреплять оружие, эффекты и другие объекты. Обычно он наследует движение и вращение объекта, к которому привязан
3. Добавляем Preview Mesh
Добавляем Preview Mesh предмета и позиционируем Socket так, чтобы предмет находился в нужном месте относительно персонажа.
Если пивот (Pivot) нашего персонажа нас не устраивает, мы можем его поменять прямо в движке, зайдя в Modeling Mode.
Pivot опорная точка объекта, относительно которой он вращается, масштабируется и позиционируется.
Modeling Mode режим моделирования в Unreal Engine, который позволяет редактировать геометрию и параметры 3D-объектов прямо внутри движка, в том числе менять положение Pivot.
4. Создаём Box
В Blueprint персонажа создаем Box.
И указываем для него в Parent Socket наш Weapon R.
Обнуляем Location и Rotation и делаем Scale, чтобы нам было удобно работать с ним.
Так как мы указали Socket как Parent, то, когда мы обнулим значения, Box примет положение Socket.
Этот Box будет жестко следовать за персонажем и выступать точкой крепления для физики.
5. Добавляем оружие
Добавляем само оружие или другой предмет к персонажу.
Добавляем еще один Box , в Static Mesh указываем наше оружие , называю предмет Target Weapon
Текстуру для оружия указываем тут.
Также указываем Socket Weapon_R как Parent Socket.
ВАЖНЫЙ момент: предмет кладем в наш Skeletal Mesh, иначе мы не сможем ничего выбрать в Parent Socket
И включаем на нем Simulate Physics.
ВАЖНО: проверьте коллизии раскачивающегося предмета. Если столкновения вам не нужны, их проще отключить. Если предмет должен сталкиваться с окружением, лучше отдельно настроить Collision Channels и исключить столкновения с самим персонажем или компонентами, к которым он прикреплен.
С тем же Box тоже происходит конфликт коллизий. Конечно, его можно исправить, включив эту галочку в Physics Constraint. (Disable Collision)
Однако предмет еще может конфликтовать с мешем персонажа.
Коллизия включена и физика не работает и оружие дергается
Вот как можно отключить коллизии.
ВАЖНО: почему мы сначала включаем физику на предмете и только потом отключаем коллизию?
Всё просто: сначала включаем Simulate Physics, а уже после этого отключаем коллизию.
Если сначала полностью убрать коллизию у предмета, Unreal не позволит включить для него Simulate Physics.
7. Настраиваем Physics Constraint
Physics Constraint это физическое соединение между двумя объектами, которое ограничивает их движение и вращение относительно друг друга.
В настройках Physics Constraint указываем:
- Component 1 наш Box;
- Component 2 оружие или другой физический предмет.
Также кладём Physics Constraint в Box, чтобы Physics Constraint следовал за Box.
8. Настраиваем ограничения вращения
После этого настраиваем ограничения вращения предмета: насколько сильно он может отклоняться по разным осям.
Делается это в Angular Limits.
Теперь оружие будет двигаться по физике.
Angular Limits ограничения вращения объекта в Physics Constraint: они задают, насколько далеко объект может поворачиваться по каждой оси относительно точки крепления.
Если хотите задать движение по перемещению, то идём в Linear Limits.
Дальше идём в Angular Motor.
Angular Motor пытается повернуть объект к заданной ориентации или поддерживать заданную угловую скорость.
Например, оружие по инерции отклонилось назад:
Персонаж ускорился = Оружие отстало по инерции =Angular Motor тянет его обратно = Оружие проходит нужное положение = немного раскачивается = возвращается в исходное положение.
Angular Limits границы движения
Angular Motor сила, которая управляет движением внутри этих границ
SLERP вращает по кратчайшему сферическому пути к целевой ориентации. Не работает, если хотя бы одна Angular-ось Locked.
Twist and Swing раскладывает вращение на отдельные угловые степени свободы: Twist и Swing.
Скроем наш Box, чтобы его не было видно в игре.
Итого
В результате Box следует за персонажем(за костью Spine04), а оружие удерживается рядом с ним через Physics Constraint и получает физическую динамику: раскачивается, запаздывает за движением и реагирует на инерцию.