Полезное

Мы Вконтакте

Discord канал

#
Пред.
12
Модератор: icms
Аватара пользователя
Пользователь
Сообщения: 98
Добрый день!
При попытке заставить различные объекты "с физикой" двигаться различными способами возник ряд вопросов...
Отступление. В Unity существует 2-3 способа для передвижения физического объекта с массой, гравитацией, сопротивлением воздуха и т.п.: добавить импульс или явно задать направление для равномерного движения.
В первом случае движение неравномерное, учитывается масса, сопротивление среды и т.д., этот способ идеально подходит для снаряда, например. Задали импульс ядру, оно вылетело, растолкало коробки, упало. Второй способ нужен для равномерного движения объекта, например планеты, поезда (без имитации колесного транспорта) или чего-то другого, что может равномерно двигаться (без вращения при ударах), расталкивать физические объекты вне зависимости от их массы, при этом скорость не снизится, если только движимый объект не столкнется со "стеной". Конечно, никто не запрещает перемещать объект явно (изменяя позицию), но это опасно - можно сдвинуть объект на 30 сантиметров и отправить соседний физический объект в космос или пройти сквозь стену. Этот способ для смещения и имитации столкновения не подходит.
В общем, вопросы:
1. Задать разовый импульс можно с помощью Add Impulse, а зачем тогда нужен Add Force (и как его использовать) я так и не понял.

2. Как равномерно двигать предмет с физикой в определенном направлении не взирая на гравитацию, массу объекта и массы объектов с которыми сталкиваемся?
Интересует именно равномерное прямолинейное движение с заданной скоростью.
Попробовал Set All Physics Linear Velocity, но тут даже гравитация учитывается и при столкновении объект начинает вращаться.

3. Я так понял, что нельзя использовать для смещения физического объекта изменение положения (Set Actor Location), т.к. объект даже при 3 м/с сможет, например, пройти сквозь стену. Да и гравитация просчитывается все равно (не подходит для равномерного движения).

4. Какие еще существуют типы движения в UE4 (Set Velocity в блюпринтах выдает столько интересных вариантов...)?

-------------------

5. В Unity физика лежит только на главном объекте, на дочерних только коллайдеры, а масса присваивается всему объекту...
Если объект (actor) состоит из нескольких частей, например из 2 кубов, нужно ли прописывать массу каждого куба?
Заметил, что импульс криво работает на составных объектах, и это привело меня к открытию: если нет галочки Simulate Physics, а объект является дочерним к физическому объекту, у которого эта галочка стоит, масса дочернего объекта учитывается.
Это нормально? Как правильно настроить физику дочерних объектов - просто указать массу?
Аватара пользователя
Пользователь
Сообщения: 2319
изначально надо разделить движение на :с использованием симуляции физики, и без него.
если брать с симуляцией то более или менее суть можно посмотреть тут :
https://www.youtube.com/watch?v=lFpXqggbUP4.
все тонкости узнаются опытным путем... но свободно манипулировать обьектом можно просто отключив ему гравитацию и задавать ему либо силы либо если это актор то можно задавать трансформацию.

а без использования симуляции через сет трансформ и хит свипа. сам трансформ рассчитываем уже логикой движения.
и тут уже вариантов много.
для обычного линейного движения симуляция физики не нужна особо, так что это вариант для него больше подходит.
стандартный мувмент компонент например не симулирует физику.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 98
Цитата:
с использованием симуляции физики, и без него.

Угу.
Цитата:
если брать с симуляцией то более или менее суть можно посмотреть тут :

Ужос, столько воды и болтовни (я англиЦкий на слух вообще не воспринимаю, нет опыта)
Цитата:
но свободно манипулировать обьектом можно просто отключив ему гравитацию

При ударе объект начинает вращаться и изменять траекторию движения, поэтому отключение гравитации не поможет сильно.
Цитата:
если это актор то можно задавать трансформацию.

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

Когда как, конечно...
Предположим, тесная комната, двигаем стул на метр, если за ним стена, то он через нее запросто пройдет, надо проверять коллизии.
Если за ним подвижная тумбочка, то она может не отодвинуться, а улететь из-за пересечения коллайдеров...
А если двигать силой, то стул может повернуться при столкновении.

В UE4 НЕТ ПРОСТОГО ДВИЖЕНИЯ ОБЪЕКТА С ФИЗИКОЙ (БЕЗ ИСПОЛЬЗОВАНИЯ СЕТТРАНСФОРМ)?
P.S. Установил физику, заблокировал повороты по осям, гравитацию убрал, в SetActorLocation установил галочку Sweep. Через стены не проодит теперь, вроде, даже на 100 м/с.
Прочитал вот это:
https://www.unrealengine.com/en-US/blog ... al-objects
Без Sweep не работает - проходит через стены...
Но теперь он другие физические объекты не расталкивает...
И ужас, он изменяет траекторию движения, но теперь без вращения.
Что делать?
Аватара пользователя
Пользователь
Сообщения: 2319
Цитата:
Ужос, столько воды и болтовни (я англиЦкий на слух вообще не воспринимаю, нет опыта)

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

Цитата:
Без Sweep не работает - проходит через стены...

и не должно работать.

Цитата:
Но теперь он другие физические объекты не расталкивает...

при свип-хите передаем импульс физическим обьектам.

Цитата:
100 м/с

при высоких скоростях циклический сабстепинг делаем.
тоесть если обьект должен пройти дистанцию скажем 10м за фрейм, то кратно двум можно провести сабстепинг движения.
например 2 этапа по 5 м, или 4 по 2,5 и так далее, в идеале подобрать кривую зависимости скорости и необходимых шагов чтоб не пролетать сквозь обьекты. ТОгда при низких скоростях лишних шагов не считается, а при высоких считается только минимально необходимое кол-во.
сам такой метод никаких сложностей представлять не должен.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 98
Угу! Но при столкновении с, например, наклонной стеной, мой объект изменяет траекторию движения, начинает ползти вдоль нее. Хорошо, тут можно проверить коллизию и остановить.
А как быть с другими физическими объектами, они изменяют направление движения при столкновени...
Есть вариант: составить уравнение прямой для направления движения и проверять текущие координаты объекта, если они не лежат на прямой (тут надо еще погрешность учитывать), то (и вот тут немного запарно) возвращать на прямую, и т.е. отложить перпендикуляр к прямой, найти координаты пересечения и поставить движимый предмет именно туда. Т.к. повороты по осям мы заблокировали, то о них и не вспоминаем.
Есть ли способ проще?:)
Аватара пользователя
Пользователь
Сообщения: 4069
rachok писал(а):
Угу! Но при столкновении с, например, наклонной стеной

при столкновении с наклонной стеной, можно получить направление нормали и от этого отталкиваться.
Аватара пользователя
Пользователь
Сообщения: 98
Цитата:
при столкновении с наклонной стеной, можно получить направление нормали и от этого отталкиваться.

Можно, но мне этого не надо пока.
Цитата:
при свип-хите передаем импульс физическим обьектам.

Если я буду смотреть и проверять на столкновения каждый тик, то не факт, что этого будет достаточно чтобы двигаемый объект не изменил траекторию... Ладно, общий смысл понятен, в UE4 физика круто реализована, если нужно простое нереалистичное поведение - делать самому, да и это не очень сложно.

И еще, по последнему вопросу, как так можно выставить дочернему объекту массу (я так понимаю, масса есть всегда, по дефолту у куба 177 кг(?)), при это просчет физики идет только на родительском объекте. Это нормально? Просчитывается суммарная масса? В Unity масса учитывается только при подключенной физике, а тут такие взаимоисключающие параграфы =)
Аватара пользователя
Пользователь
Сообщения: 2319
из-за чехарды с определениями и неточностями формулировки - непонятен вопрос.
масса есть только в контексте физической симуляции, и для каждого обьекта который может учавствовать в симуляции есть свиток настроек Physics там меняй что нужно в т.ч. и массу.(дефолтная маса высчитывается из дефолтной плотности и обьема коллизии)

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

у соединенных и "приваренных" обьектов высчитывается общий центр масс, от которого производятся вычисления симуляции.

Это работает только при симуляции физики и не работает если устанавливать позицию обьекта вручную без симуляции.
( и именно поэтому капсуль персонажа не подхватывает дочерние коллизии, потому что капсуль чарактера не симмулирует физику)
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 98
Я создаю блюпринт, в нем размещаю всякие меши, к мешам добавляю кубики и т.д.:
Изображение
У самого родительского объекта может быть включена симуляция физики, так? Если включить ее у дочерних - каждый компонент будет с физикой и модель развалится под действием гравитации и прочих объектов...
Как грамотно настраивать дочерние компоненты? Просто выставить им массу и больше ничего не трогать?
Аватара пользователя
Пользователь
Сообщения: 2319
Цитата:
Как грамотно настраивать дочерние компоненты?

смотря какие цели преследуются...
а вообще там настроек совсем мало почему бы просто не поекспериментировать?
потому что ответ будет выглядеть как:

n) - если нужно ... тогда ...
n++) - если нужно ... тогда ...
_________________
we need to go deeper


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

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