Рубрика развивается при поддержке

Как сделать «пьяную физику» на Unreal Engine 4

Всем привет! В этой статье я поделюсь опытом использования “Physical Animation Component”, с помощью которого я добился эффекта “пьяной физики” в моей весёлой игре про пьяные драки "Drunken Fist 🍺👊 Totally Accurate Beat 'em up"

В закладки
Аудио

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

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

Анимация удара с использованием "Physical Animation" Александр Дударев

Этот приём также полезен для создания эффекта "тряпичной куклы"

Эффект "тряпичной куклы" при движении https://gfycat.com/fragrantscentedkinglet-unrealengine-ragdolling-ue4

Чтобы применить этот эффект к скелетным анимациям, вам нужно добавить компонент “Physical Animation Component” в блупринт вашего персонажа.

Добавляем компонент "Physical Animation Component" Александр Дударев

Затем нужно добавить компонент “Physical Animation” на Event Graph, и, в нужный вам момент (например, при старте игры), поочередно вызвать ноды:

Задаем физическую анимацию в Event Graph Александр Дударев
  • “Set Skeletal Mesh Component”, чтобы указать к какому Skeletal Mesh нужно применить физическую анимацию.
  • “Apply Physical Animation Settings Below”, чтобы применить физическую анимацию ко всем костям, ниже указанной в иерархии скелета. Для настройки физических сил, вы можете использовать ноду “Make Physical Animation Data” или взять уже готовый профиль. Чем выше значения сил, тем точнее физика будет стараться повторить анимацию, и наоборот. Поиграйте со значениями, чтобы добиться “пьяного эффекта”.
  • “Set All Bodies Bellow Simulate Physics”, чтобы заставить Mesh симулировать физику ниже указанной кости в иерархии скелета. Без этой ноды, ваша физическая анимация не заработает. Убедитесь, что Skeletal Mesh имеет привязанный к нему Physics Asset в свойствах.
Настройка "Physics Asset" в свойствах Skeletal Mesh Александр Дударев

Здесь есть один важный момент, который я бы хотел отметить. Если вы хотите, чтобы ваш персонаж мог ходить и оставался в капсуле во время движения, у вас есть 2 способа:

  • Вы применяете физическую анимацию и симулируете физику на всех костях КРОМЕ кости таза (Pelvis). Таз не будет участвовать в симуляции и ваш персонаж будет всегда находится в капсуле (Capsule Component). Это похоже на то, если бы вы насадили таз персонажа на палку, и двигали бы им по сцене, при этом все остальные части скелета симулируют физику.
  • Вы применяете физическую анимацию и симулируете физику на всех костях В ТОМ ЧИСЛЕ и на кости таза (Pelvis), но снимаете галочку “Is Local Simulation” и задаете довольно большую Position Strength. Это будет означать, что персонаж, фактически не привязан к капсуле, но физическая сила будет пытаться удерживать его в ней. Этот способ не подойдет вам, если вы хотите задать слишком низкую силу для придания эффекта “тряпичной куклы”, она просто не удержит таз персонажа внутри капсулы.

Больше информации по настройке вашего персонажа с помощью “Physical Animation” вы можете почерпнуть из стрима разработчиков Unreal Engine

Стрим разработчиков Unreal Engine про использование Physical Animation

Надеюсь, эта статья станет для кого-то отправной точкой в поиске интересных идей для игр, с использованием "Physical Animation"

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Дударев Александр", "author_type": "self", "tags": [], "comments": 26, "likes": 64, "favorites": 118, "is_advertisement": false, "subsite_label": "gamedev", "id": 68820, "is_wide": false, "is_ugc": true, "date": "Tue, 10 Sep 2019 08:07:28 +0300", "is_special": false }
0
{ "id": 68820, "author_id": 14416, "diff_limit": 1000, "urls": {"diff":"\/comments\/68820\/get","add":"\/comments\/68820\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/68820"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }
26 комментариев
Популярные
По порядку
Написать комментарий...
–4

Раз уж статья в геймдеве, мб стоит убрать "Эффект "тряпичной куклы" " и заменить на устоявшийся в индустрии термин, без всяких никому не нужных локализаций?

Ответить
8

Раз уж статья в геймдеве, то значит вместо наследования должен быть inheritance, вместо языка программирования programming language? Мб сразу ещё и на английском давайте писать, устоявшийся в индустрии язык же...
Пишите свои статьи так как вам хочется, а другие пусть пишут как им хочется.

Ответить
1

Хм, странный ты. Я сказал устоявшийся в индустрии термин. Подразумевая в виду именно СНГ. Наследование и язык программирования обычно так и употребляются, именно на русском, так что вброс не засчитан, попробуй ещё

Ответить
0

Ну что же... Давайте, как говорится, разберём по частям вами написанное.

Я сказал устоявшийся в индустрии термин.

Нет, вы указали автору на то, что СТОИТ заменить русский термин на английский.
Подразумевая в виду именно СНГ.

Я тоже про СНГ. Давайте взглянем на образовательную\научную сферу и то как там используют данный термин:
1) http://research.itmo.ru/file/stat/314/vkmu_t_2.pdf
2) https://openbooks.itmo.ru/ru/collections_article/2540/razrabotka_i_modelirovanie_obektov_i_ih_animacii_dlya_kompleksa_virtualnyh_obrazovatelnyh_laboratoriy.html
И мы видим, что используется точно так же термин "тряпичная кукла". Ну если вы уж не образованный, то не нужно бить себя в грудь и кричать, что правильно быть необразованным.

И ещё момент... Моё обращение было к вам на "вы", а вы начали мне "тыкать". Возможно вы забыли, но в "индустрии" культурного общения (в кавычках чтобы вы поняли мой пассаж в сторону ваших заявлений про то как принято в индустрии геймдева) с незнакомыми людьми принято общаться на "вы", а поступать как поступили вы, в данном случае, считается не совсем корректным. Не могу вспомнить когда это фамильярность стала нормой в обществе... Не напомните?

Ответить
–6

Не могу вспомнить когда это фамильярность стала нормой в обществе... Не напомните?

Ну, примерно тогда, когда появился интернет, алло, ты из какой пещеры вылез, дядя?
И да, мне абсолютно плевать на твои ссылки из какого-то левого универа, которые просто еще раз доказывают абсолютную не компетенцию ВУЗов в России, по крайней мере касательно геймдева. И что заместо прозябания 4-х лет в ВУЗе, лучше потратить 1-2 года на самообразование с отдачей на порядок выше. Хотя бы такие позорные термины, как "тряпичная кукла" человек не будет после этого произносить.
И да, по разговору с тобой стало понятно, что ты в лучшем случае мамкин инди девелопер, максимум делающий в свободное время какие-то поделки, с около нулевой технической подготовкой, но никак не специалист из индустрии. А значит не тебе указывать о правильном написании терминов, это как минимум глупо выглядит.

Ответить
1

А ведь когда-то игровая индустрия прививала ненависть и агрессию. А теперь куда не плюнь все обидятся. :C

И ещё момент... Моё обращение было к вам на "вы", а вы начали мне "тыкать".

Ответить
0

какого-то левого универа

ИТМО

Мда... Хотя чему я удивляюсь? Фамильярностью вы показали свой социальный статус, а этим заявлением показали отсутствие образования. Одно вытекает из другого, но вы конечно же будете бить себя пяткой в грудь и пытаться доказывать обратное.
не компетенцию ВУЗов в России

Итмо 7 раз занимали первое место на ACM ICPC, два последних раза первое место ушло МГУ. Так же МГУ входит в топ 100 университетов мира, а в топ 500 входит более 10 вузов по РФ... Вы не имеете ни малейшего представления о том, что из себя представляет образование в РФ, раз кидаетесь такими голословными утверждениями.

Думаю можно поставить точку. Не хочу опускаться до вашего уровня, займусь лучше другими делами.

Ответить
1

Так, во первых, я написал о не компетенции именно относительно геймдева. Хватит читать так, как тебе удобно.
Во вторых, буквально 3 месяца назад собеседовал нескольких людей с ИТМО на позицию джуниор UE4 разработчика и если интересно, они были ОЧЕНЬ слабыми как со стороны C++ программирования, и тем более со стороны навыков именно в движке, так что да, как минимум это даёт мне право считать данный вуз левым, т.к. он не даёт нужных навыков людям, а значит он просто не нужен. Да, тут конечно можно возразить, что вуз нехера давать тебе не должен, а ты сам должен брать что-то от него, тут полностью соглашусь, НО! Раз чуваки учатся на 4 курсе, значит они вполне успешно сдают экзамены и курсовые, а значит какой-то уровень знаний у них должен быть, ведь так? В ином случае их нужно было бы просто отчислить. Но, этого нету, а значит вуз абсолютно не компетентный и готовит не понятно кого, не понятно для чего.

Ответить
0

Забыл указать, что учились товарищи на одном из новых факультетов, где по мимо программирования еще должны изучать геймдев и UE4 в том числе

Ответить
0

Сообщение удалено

Ответить
0

Эм, мимо, это была прошлая компания

Ответить
0

Ох, какой ужас. Так напишите тогда, не скрывайте.

Ответить
0

Сказал анонимус без какой либо информации о себе). А так, кому надо, тот найдет, я не скрываю ни от кого свой карьерный путь)
И мы как то съехали с темы, что ИТМО и специалисты, которых он плодит, ничего не стоят по факту, будут аргументы против этого утверждения? Или ты и есть один из тех, кто учился на том факультете?

Ответить
1

А, ну как кидать камень в огород университетов, так вы готовы, а как рассказать КУДА шли собеседоваться студенты этих университетов, то значит не готовы... Вы не стесняйтесь, говорите как есть. А то выглядит будто компания всего-лишь очередной эпиковский грантоед.

Ответить
0

Какая разница куда они шли? Важно то, что они были абсолютно не компетентными и к работе таких людей подпускать нельзя, даже на джуниор позиции.

Ответить
0

Какая разница куда они шли?

Как это "какая разница"? Вы же наверно крутая компания, которая разрабатывает крутые игры, используете современные технологии, а не очередной грантоед эпиков, который использует движок только для того чтобы откусить кусочек халявы от эпиков. И репутация наверно у компании то стоящая, не зря же вы так вальяжно говорите о индустрии.
Вы же кидаетесь заявлениями про качество В.О., рассуждая о геймдеве и программировании как о матане и школьной арифметике. Расскажите, что же за компания у вас там такая. Очень интересно.

Ответить
2

Я бы никогда не влез в это вот всё, если бы не увидел четыре знакомые буквы.
ИТМО - абсолютно дерьмовейший университет. Да, я там учился. Всё что я знаю по программированию, я узнал в процессе работы

Итмо 7 раз занимали первое место на ACM ICPC,

И ПРО ВОТ ЭТО ДЕРЬМО я пишу везде, чтоб об этом узнало МАКСИМАЛЬНОЕ количество людей. Занимают место на этом чемпионате "баскетбольная команда" ИТМО, несколько человек, которых тренируют с самого прихода в универ, позволяя прогуливать остальные пары. Это не типичные студенты
Вся эта херня с чемпионами мира по программированию - пиар компания ужасного университета погрязшего в коррупции полностью. Это как моё мнение так и профессоров из других университетов страны, с которыми мне удалось познакомиться.

Вообще ничего личного против вас, господа, не имею) это просто мой долг писать везде что ИТМО - дерьмо, так как я это пережил и также в 18 лет попался на хуйню с чемпионами мира по программированию)

Ответить
1

Я в этой компании больше не работаю, и как уже написал, всю информацию о моей прошлой работе при желании можно найти на одном небезызвестном сайте про работу в IT, тут это афишировать я не вижу абсолютно никакого смысла.
И где корреляция между "крутостью" компанией, продуктом, которая она выпускает и уровнем специалистов, которые в ней работают/ищутся? Если человек ничего не знает и не умеет, то он не нужен нигде, ни в мейле каком нибудь, ни в самом дерьмовом стартапе.

Так что хватит оправдывать твой дерьмовый ИТМО, в котором ты учишься (или еще хуже, преподаешь), прими уже реальность такой, какая она есть.

Ответить
0

сначала свой шутинг сделай потом назвай как хочешь, ок если да?

Ответить
0

Товарищ, ваш комментарий душное говно!

Ответить
0

totally accurate battle simulator вы делали или просто такая "маркетинговая тактика"?

Ответить
1

маркетинговая тактика )

Ответить
0

Норм дед

Ответить
0

Годно. Только звуки бы "пожирнее"

Ответить
0

О, клёвая игра. Недавно смотрел летсплей у Drae, много смеялся. :)

Ответить
0

Дайте ссылку на покупку, если игра в релизе, а то как сделано написано, а не пощупать.

Ответить

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovz", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]