Работа с констрейнами была уже немного проиллюстрирована в разделе «Колбасинг» в начале этой главы. Констрейны, как правило, связывают между собой движение двух объектов, однако при создании констрейна для одного твердого тела второй конец констрейна остается свободным и может быть проанимирован вручную произвольным образом. Это относится к пружинам (Spring Constraint) и вращению вокруг оси (Hinge Constarint). Прибивание к точке (Nail Constraint) требует выбора только одного объекта, а связывание «скобой» (Pin Constraint) создается только для двух твердых тел.
Создание констрейнов - процесс интуитивно понятный, традиционно требующий предварительного выбора объектов. Атрибуты констрейнов также немногочисленны и прозрачны для понимания. Я приведу небольшой пример конструирования устройства, требующего комбинирования констрейнов для достижения нужных механических свойств. Не забывайте, что позиция любого констрейна может быть проанимирована любыми доступными в AAAYA способами.
Подвесной таран Сконструируем таран, представляющий собой бревно, подвешенное на двух цепях.
Лучшее бревно это полигональный цилиндр, лежащий на боку (rotateX=90, scaleY = 5). Сделайте его, выберите и создайте поле гравитации: Field=>Gravity.
Нажмите Play.
Цилиндр норовит выпасть снизу из монитора.
Попытки создать два Nail Constraint для одного цилиндра приводят к неутешительному выводу о том, что констрейн всегда крепится к твердому телу строго в центре масс. Редактируя положение атрибутов centerOfMass, можно смещать точку крепления, однако иметь два центра масс невозможно по определению, и поэтому подвесить цилиндр за две точки так просто не получится.
Идея состоит в том, чтобы создать две точки крепления в виде небольших твердых тел, которые можно прикрепить к бревну, например, при помощи Pin Constraint. А эти тела-крепления можно потом подвесить в пространстве обычным Nail Constraint.
Создайте два полигональных кубика и расположите их ближе к краям цилиндра в местах подвеса.
Превратите их в активные твердые тела: Soft/Rigid Bodies=>Create Active Rigid Body.
Пытливые умы тут же возопят: «А как же пятый закон динамики о непересечении твердых тел!!». И будут правы. Но мы и не собираемся использовать эти кубики для столкновений с другими телами и хотим сохранить их расположение относительно бревна.
Поэтому установите для них в Channel Box атрибут твердого тела collisions=off.
Это исключит два этих тела из расчета столкновений и отменит их способность сталкиваться с другими телами.
Теперь прикрепим каждый кубик к цилиндру.
Выберите сначала первый кубик, затем цилиндр и выполните Soft/Rigid Bodies=>Create Pin Constraint. Передвиньте центр созданного констрейна внутрь кубика.
Проиграйте анимацию, посмотрите, как движутся объекты.
Теперь выберите кубик и «прибейте» его к «воздуху» с помощью Soft/Rigid Bodies=>Create Nail Constraint.
Переместите центр нового констрейна вверх по вертикали.
Проиграйте анимацию и проделайте аналогичные действия со вторым кубиком. Бревно должно неподвижно повиснуть на двух креплениях.