Полезное
Мы Вконтакте
Discord канал
Компоненты Physics Constraint работают так же, как Physics Constraints Actors, за исключением того, что они используются в блупринтах или могут быть созданы в C++.
Принимая во внимание гибкость блупринтов и мощь C++, вы можете использовать физические связи для любого объекта в вашем проекте с Physics Constraint Components.
Physics Constraint — специальный объект, который позволяет привязать физический объект к другому (будь то физический или нет). При этом привязка будет не строгая, что означает, что предмет будет привязан будто на веревке или шарнире, позволяя физическому объекту свободно или ограниченно перемещаться относительно точки связи.
Physics Constraint хорошо подходит для создания дверей, которые открываются толчком другого объекта или качающейся люстры на потолке.
Привязка объектов через Constraint |
Physics Constraint компонент |
Параметры Physics Constraint |
Если вам нужно создать качающуюся люстру, водяное колесо, или просто хотите сохранить физику тела в общей области, Physics Constraint то, что вам нужно. Этот документ будет охватывать использование Physics Constraint.
Physics Constraint позволяет соединять два актера вместе (предположительно один является физическим), а также применять к ним различные ограничения или силы.
Unreal Engine 4 имеет очень гибкую систему ограничений, которая позволяет разработчикам сделать много различных типов соединений просто путем изменения некоторых параметров.
Движок имеет встроенные типы нескольких базовых соединений (шаровое, призматическое, петли), но они отличаются только их настройками.
Если вы используете скелетал меш, вам нужно будет указать имя Constraint Bone. Меш в данном случае будет прикреплен за указанную кость.
Если вы хотите, использовать подобную связь для конкретных компонентов внутри объекта, вы можете использовать имя этого компонента в соответствующем поле.
Если это поле оставить пустым, то будет выбран корневой компонент. Тем не менее, если вы используете действительные имена компонентов в Constrained Actor 1 и / или Constrained Actor 2,
то компонент станет частью этой связи. Если этот компонент является скелетал мешем, необходимо также указать имя кости в соответствующем поле.
После того, как вы указали имя компонента Constrained Actor, ограничивающий объем появится вокруг этого компонента. Если ограничивающий объем не отображается,
проверьте имя вашего компонента и убедитесь, что он на самом деле может быть использован здесь.
Эта страница список параметров физических соединений (Physics Constraints).
Свойство | Описание |
Constraint Actor 1 | Указатель на первый объект. |
Component Name 1 | Имя первого компонента для взаимодействия. Если в Constraint Actor 1 ничего не указано, то будет выбираться компонент в пределах текущего объекта. Если здесь ничего не указано, то будет использоваться корневой компонент из текущего объекта. |
Constraint Actor 2 | Указатель на второй объект. |
Component Name 2 | Имя второго компонента для взаимодействия. Если в Constraint Actor 2 ничего не указано, то будет выбираться компонент в пределах текущего объекта. Если здесь ничего не указано, то будет использоваться корневой компонент из текущего объекта. |
Joint Name | Название кости с которой связано это соединение. |
Constraint Bone 1 | Название первой кости (тела), для взаимодействия. Это будет дочерняя кость в PhysicsAsset. |
Constraint Bone 2 | Название второй кости (тела), для взаимодействия. Это будет дочерняя кость в PhysicsAsset. |
Disable Collision | Отключить взаимодействие. |
Свойство | Описание |
Enable Projection | Если ошибки расстояния между телами превышают 0,1 единиц, или ошибка вращения превышает 10 градусов, тело будет проецироваться, чтобы исправить это. Например, соединение слишком быстро будет двигаться и элементы покажутся отделенными друг от друга из-за скорости, эта настройка позволит проецировать все тела так, что они по-прежнему будут выглядеть связанными. |
Projection Linear Tolerance | Допустимый лимит ошибок положения. |
Projection Angular Tolerance | Допустимый лимит ошибок вращения. |
Свойство | Описание |
Hinge | Пресет шарнира. Шарнир допускает движение только в одной плоскости. |
Prismatic | Пресет призмообразного соединения. Призмообразное соединение позволяет только линейные скользящие движения. |
Ball and Socket | Пресет шарового соединения. Мяч и шарнир допускают движение вокруг неопределенного числа осей, которые имеют один общий центр. |
Свойство | Описание |
Linear XMotion | Указывает, разрешено ли линейное движение вдоль оси X, заблокировано или ограничено. Если движение ограничено, свойство LinearLimit будет определять диапазон границ. |
Linear YMotion | Указывает, разрешено ли линейное движение вдоль оси Y, заблокировано или ограничено. Если движение ограничено, свойство LinearLimit будет определять диапазон границ. |
Linear ZMotion | Указывает, разрешено ли линейное движение вдоль оси Z, заблокировано или ограничено. Если движение ограничено, свойство LinearLimit будет определять диапазон границ. |
Linear Limit Size | Предельная степень, в мировых единицах, линейного движения для ограниченных осей движения. |
Свойство | Описание |
Linear Limit Soft | Хотим ли мы использовать мягкие ограничения вместо жестких. |
Linear Limit Stiffness | Жесткость предела мягких ограничений. Используется только, когда Linear Limit Soft включено. |
Linear Limit Damping | Затухание предела мягких ограничений. Используется только, когда Linear Limit Soft включено. |
Linear Breakable | Определяет может ли сустав сломаться или нет. |
Linear Break Threshold | Усилие, необходимое, чтобы разорвать соединение. |
Свойство | Описание |
Angular Swing 1Motion | Указывает, разрешено ли вращение вокруг оси Z, заблокировано или ограничено. Если ограничено, свойство AngularLimit будет использоваться для определения диапазона движения. |
Angular Twist Motion | Указывает, разрешено ли вращение вокруг оси X, заблокировано или ограничено. Если ограничено, свойство AngularLimit будет использоваться для определения диапазона движения. |
Angular Swing 2Motion | Указывает, разрешено ли вращение вокруг оси Y, заблокировано или ограничено. Если ограничено, свойство AngularLimit будет использоваться для определения диапазона движения. |
Swing 1Limit Angle | Используется, если поворотное движение вдоль оси Y ограничено. Предельный угол задается в градусах и должен находиться в диапазоне от 0 до 180. |
Twist Limit Angle | Используется, если поворотное движение вдоль оси X ограничено. Предельный угол задается в градусах и должен находиться в диапазоне от 0 до 180. |
Swing 2Limit Angle | Используется, если поворотное движение вдоль оси Z ограничено. Предельный угол задается в градусах и должен находиться в диапазоне от 0 до 180. |
Angular Rotation Offset | Задает угловое смещение между двумя системами отсчета. По умолчанию предел идет от (-угол, + угол). Это позволяет смещать предел для swing1, swing2 и twist. |
Свойство | Описание |
Swing Limit Soft | Если мы хотим использовать мягкие ограничения для распашных движений вместо жестких ограничений. |
Swing Limit Stiffness | Жесткость предела распашных ограничений, если Swing Limit Soft включено. |
Swing Limit Damping | Затухание предела распашных ограничений, если Swing Limit Soft включено. |
Twist Limit Soft | Если мы хотим использовать мягкие ограничения для вращательных движений вместо жестких ограничений. |
Twist Limit Stiffness | Жесткость предела вращательных ограничений, если Twist Limit Soft включено. |
Twist Limit Damping | Затухание предела вращательных ограничений, если Twist Limit Soft включено. |
Angular Breakable | Можно ли разорвать соединение. |
Angular Break Threshold | Угловое усилие, которое необходимо, чтобы разорвать соединение. |
Свойство | Описание |
Linear Position Drive | Включение / выключение привода положения. |
Linear Position Target | Конечное положение линейного привода. Показаны только компоненты, которые разрешены к использованию. |
Linear Position Strength | Сила линейного привода. |
Linear Velocity Drive | Включение / выключение линейного привода скорости. |
Linear Velocity Target | Целевая скорость линейного привода. |
Linear Velocity Strength | Сила линейного привода. |
Max Linear Force | Ограничение по силе которую может применять линейный привод. |
Свойство | Описание |
Angular Orientation Drive | Включает / выключает привод ориентации. |
Angular Orientation Target | Целевая ориентация для углового привода. |
Angular Orientation Strength | Сила углового привода. |
Angular Velocity Drive | Включение / выключение углового привода скорости. |
Angular Velocity Target | Целевая скорость углового привода скорости. |
Angular Velocity Strength | Сила углового привода скорости. |
Max Angular Force | Ограничение по силе которую может применять угловой привод скорости. |
Angular Drive Mode | Тип углового привода. |
Этот раздел описывает свойства Collision Presets и Collision Response. Не смотря на то что второе является частью первого, они были разнесены, для ясности.
Ниже приведены свойства Collision Presets.
Collision Responses и Trace Responses формируют основу того, как Unreal Engine 4 обрабатывает столкновения и рей кастинг (ray casting) запросы время выполнения.
Каждый объект, который может столкнуться получает Object Type и ряд параметров, которые определяют, как он будет взаимодействовать с другими типами объектов.
При столкновении или перекрытии объектов могут генерироваться события, каждому из объектов можно настроить параметры влияния на другие типы объектов, будут ли они сталкиваться или игнорировать друг друга.
Trace Responses работают в основном так же. Трейс сам по себе может быть определен как один из типов объектов, позволяя другим объектам на основе своих настроек либо блокировать либо игнорировать его.
Есть несколько вещей, которые нужно иметь в виду, что бы понимать, как обрабатываются столкновения:
Для целей тестирования уровней:
Поясним что происходит, дабы вы без труда поняли что происходит в следующем разделе:
Сфера является PhysicsBody а стена World Dynamic, путем изменения их параметров столкновений мы будем получать различное поведение.
Установите оба объекта в режим Blocking, чтобы они блокировали друг друга, вы получите столкновение, вот так объекты взаимодействуют друг с другом:
Сфера | Стена |
В этом случае сфера является PhysicsBody и она настроена, чтобы блокировать World Dynamic (тот же тип что и стена). | Стена является World Dynamic и должна блокировать PhysicsBody объекты (сферу). |
В этом случае сфера и стена просто сталкиваются, никаких дополнительных уведомлений о столкновении будет.
Простое столкновение полезно и само по себе — голый минимум для физических взаимодействий. Однако если вы хотите что-то сообщить при столкновении объектов то:
Сфера | Стена |
Как и в приведенном выше примере, сфера является PhysicsBody и она настроена, чтобы блокировать World Dynamic (которым является стена). Однако сфера также может формировать Event Hit события, так что будем инициировать эвент всякий раз, когда она сталкивается с чем-то. |
Стена является World Dynamic и настраивается на блокирование PhysicsBody объектов (тот же тип что и у сферы). Поскольку у стены не установлен флажок Simulation Generates Hit Events, она не будет генерировать ни каких событий при столкновении с собой. |
Поскольку у сферы включен параметр Simulation Generates Hit Events, она будет генерировать события каждый раз при столкновении с собой.
Кроме того, объект, который сообщает о жестких столкновениях будет сообщать о них так же, когда он просто лежит на чем-то, так что лучше быть осторожным, нужно отделять полезные сообщения от “спама”.
Во всех прочих случаях когда включены флаги Overlap или Ignore, но выключен флаг Simulation Generates Hit Events, сфера просто будет игнорировать стену:
Сфера | Стена |
Здесь у сферы включен Overlap для World Dynamic (как наша стена), но отключен параметр Simulation Generates Hit Events. По этому сфера будет игнорировать стену не генерирую при этом ни каких событий. |
Стена является World Dynamic и настраивается на блокирование PhysicsBody объектов (тот же тип что и у сферы). Как было указано выше, оба объекта должны иметь настройку Blocking, чтобы блокировать соответствующие типы объектов. Если этого не сделать, они не будут сталкиваться. |
Или:
Сфера | Стена |
Здесь сфере устанавливается Ignore для World Dynamic (как стена), и она будет проходить через стену. | Стена имеет тип World Dynamic и блокирует PhysicsBody объекты. Как было указано выше, оба объекта должны иметь настройку Blocking, чтобы блокировать соответствующие типы объектов. Если этого не сделать, они не будут сталкиваться. |
В отличие от столкновений, которые могут срабатывать каждый кадр, Overlap эвенты ReceiveBeginOverlap и ReceiveEndOverlap, срабатывают только в этих конкретных случаях:
Сфера | Стена |
Здесь сфере устанавливается параметр Overlap для World Dynamic объектов (как стена), и она будет генерировать события, каждый раз когда она что-то перекрывает. | Стена является World Dynamic и настраивается на блокирование PhysicsBody объектов (тот же тип что и у сферы). Как было указано выше, оба объекта должны иметь настройку Blocking, чтобы блокировать соответствующие типы объектов. Если этого не сделать, они не будут сталкиваться. Но, здесь сфера проходит через стену и срабатывает эвент. |