вернуться на beanet.ru вернуться к списку проектов вернуться на главную страницу сборника

Тема: Физические конструкции (ограничения)


Ключевые слова: конструкция ограничение constraint скрепить прикрепить

См. также:
Список используемых понятий, сокращений и обозначений

перейти к общему списку

Для создания определённых конструкций - попарного скрепления различных объектов, движок Source использует специальные constraint-энтити. Т.е. для скрепления каждой пары объектов между собой используется constraint-энтити. Аналогично, каждая пара образуемых таким образом физических конструкций может скрепляться, в свою очередь, посредством ещё одной constraint-энтити.

Формально слово "constraint" переводится как "ограничение", но в конечном счёте данные энтити помогают в создании разнообразных (в основном, динамических) конструкций. Хотя каждая constraint-энтити отвечает именно за ограничение перемещения двух VPhysics-объектов относительно друг друга. Так что будет разумно использовать как прямой перевод, так и смысловое именование.

VPhysics-объекты представляют из себя энтити, у которых имеются модель (mdl). В файле модели как правило описывается внешний вид, коллизионная модель (collision model), задаются некоторые характеристики объекта (масса, материал). Сам VPhysics представляет из себя встроенный в Source движок 3D-моделирования физических свойств и явлений: масс, гравитации, трения, сопротивления воздуха, инерции и плавучести. Прообразом VPhysics послужил Havok.

Примечание: constraint-энтити манипулируют с физическими центрами масс подчинённых энтити. Чтобы использовать конкретную точку присоединения (attachment) на модели, к изначальной конструкции прикрепляется энтити info_constraint_anchor, для которой можно указать родительскую энтити (см. далее).

Примечание: чтобы просто ограничить движение энтити относительно игрового мира (т.е. прикрепить её к некоторой неподвижной точке), один из указателей constraint-энтити на подчинённый объект можно оставить пустым.

Примечание: основное предназначение constraint-энтити - скрепление именно VPhysics-объектов. Несмотря на это, можно в качестве подчинённых объектов указывать, например, env_sprite. А вообще, для подобных объектов (в т.ч. QPhysics - с упрощённой физикой) обычно используют привязку к родительской энтити (parent).

Замечание: если нужно управлять конкретным скреплением во время игры (включать/отключать), не используйте для него phys_constraintsystem (не указывайте атрибут Constraint System Manager). В противном случае скрепление будет всё время активным, до момента разрушения.
Также имейте ввиду, что скрепление вычисляется на этапе загрузки карты, поэтому даже те объекты, скрепление между которыми изначально выключено, необходимо сразу располагать в желаемом конечном виде относительно друг друга.



Простые конструкции


phys_constraint
блокирует движение подчинённых объектов относительно друг друга (эффект склеивания или примагничивания).
phys_lengthconstraint
ограничивает максимальное и минимальное расстояние между подчинёнными объектами, либо расстояние, на которое может переместиться объект (если задан один) от текущего положения (эффект связывающей верёвки).
phys_keepupright
стремится придать подчинённому объекту вертикальное положение. Имейте ввиду, что результат может быть сильно неудовлетворительным.
phys_ballsocket
блокирует движение подчинённого объекта, допуская при этом свободное вращение (эффект сустава, который задаётся положением данной энтити).
phys_hinge
блокирует движение подчинённого объекта, допуская при этом вращение относительно выбранной оси (эффект насаженного на стержень объекта).
phys_slideconstraint
ограничивает движение подчинённого объекта вдоль выбранной оси (эффект скольжения вдоль определённой линии).



Сложные конструкции


phys_pulleyconstraint
конструкция из двух phys_lengthconstraint с общими значениями расстояний (эффект веревки, связывающей два крепления, за которые подвешены объекты).
phys_ragdollconstraint
конструкция из phys_ballsocket с ограничением углов вращения (аналогичен эффекту сустава, но допустимо отклонение объектов на определенный угол, для каждой оси).
phys_spring
жёстко ограниченная длина с эффектом пружины (в дополнительных энтити контроля не нуждается).



Специальные энтити


phys_constraintsystem
управляет группой взаимодействующих (перекрывающихся) конструкций, делая их стабильными (подавляет ненужные коллизии и "дёргания").
Данная энтити применяется, если число скреплений в одной системе равно двум и более. В атрибуте Constraint System Manager каждой энтити скрепления (из одной системы) укажите имя энтити контроля phys_constraintsystem. Для энтити-"пружины" (phys_spring) этого указывать не нужно (и невозможно).
info_constraint_anchor
используется как составная часть - для прикрепления конструкции к определённой точке энтити (по-умолчанию конструкция действует относительно центров масс подчинённых объектов). Обычно конструкция прикрепляется к данной энтити, которая с помощью Parent прикрепляется к необходимой энтити. Возможно и прикрепление info_constraint_anchor, в свою очередь, к другой конструкции.



Статьи (рус):
Статьи (eng): Constraint, VPhysics

перейти к общему списку

Номер статьи: 50

Сборник полезной информации по созданию модификаций на движке Valve Source Engine (игры Half-Life 2, Episode One, Episode Two)