Физические энтити
Добавление физики в движок Сорса открыло широкий ряд возможностей по
имитации физических свойств объектов. Левел-дизайнеры теперь могут
создавать реалистично работающие объекты: от покрышки на веревке до
сложного механизма. Для их создания нужно знать, как работают
физические энтити и как они применяются, что и написано в приведенном
ниже списке. Короче, скажу так: хотите использовать на своей карте то,
что является фишкой ХЛ2,- читайте дальше;)
Соединяющие энтити
В реальной жизни объекты прикреплены друг к другу различными способами: двери прикреплены к косякам при помощи петель, рука прикреплена к торсу при помощи сустава. Все это точно также отображено в движке Сорса, ниже приведен список constraint-энтитей - энтитей, с помощью которых вы сможете прикреплять объекты друг к другу различными способами.
phys_constraintsystem |
Большое количество энтитей, соединенных вместе, обычно очень сильно загружает систему, так как нужно просчитывать все взаимодействия между ними. Один из способов уменьшить нагрузку на систему - собрать все constraint-энтити, действующие на одни и те же объекты, и объединить их в эту самую constraint-систему (т.е. в соединительную систему=)). Это позволит системе физики в игре просчитывать взаимодействие между объектами намного быстрее. Таким образом, эта система призвана получить максимальную производительность при нескольких физических связях объектов. |
phys_constraint |
Самый простой способ соединения -
прикрепить один
объект к другому, как будто они присоединены друг к
другу при помощи гвоздей или клея. Энтитя имеет два поля, в которых
указываются связываемые объекты. Если одно из полей оставить пустым, то
оставшаяся энтитя будет твердо прикреплена к центру phys_constraint
(т.е. как будто они соединены при помощи палки, а не веревки (rigid - жесткий,
негнущийся, закрепленный неподвижно)) - это
очень часто используемый способ привязки объектов к игровому миру. Вы
также можете указать в свойствах энтити лимит приложенной к ней силы,
после превышения которого связь между скрепленными объектами будет
разрушена. Кстати, этот разрыв связи можно использовать как событие в
системе И/О (Input/Output) Карта-пример - maps/sdk_phys_constraint.vmf |
phys_ballsocket |
Способ действия болсокета (ball socket - "круглая впадина";)) точно такой же, как и у сустава вашей руки, который прикрепляет ее к торсу. Объект прикрепляется к другому объекту в определенной точке и может вращаться в любом направлении. Эта энтитя может использоваться для прикрепления веревки к какой-нибудь стене. Карта-пример - maps/sdk_phys_ballsocket.vmf |
phys_hinge |
Так же, как и обычные дверные петли, эта энтитя позволяет прикрепленным объектам двигаться вокруг одной оси. Эта ось видна в Хаммере при включенном хелпере; чтобы указать ось, просто составьте ее из линии между энтитей и кругленькой штуки;). Также здесь имеется свойство трения, то есть вы можете заставить петли вращаться так, как будто они очень старые или ржавые (или старые и оттого ржавые=)). Свойство "load scale" точно такое же, как и у phys_motor (см. ниже). Карта-пример - maps/sdk_phys_hinge.vmf |
phys_lengthconstraint |
Эта энтитя сохраняет дистанцию между двумя объектами. Если поставлен флаг "Keep Rigid", то объекты будут соединены так, словно их прикрепили к одной палке; если же нет, то будет похоже на веревку. Карта-пример - maps/sdk_phys_lengthconstraint.vmf |
phys_pulleyconstraint |
По большому счету это 2 phys_lengthconstraint`а и 2 точки в пространстве. Принцип действия этой энтити похож на веревку, соединенную с двумя объектами, каждый из которых подвешен на ролик. Энтитя сохраняет постоянным суммарное расстояние между этими двумя точками и объектами... Другими словами, если потянуть за один конец и удлинить воображаемую веревку, то на другом конце она укоротится%). Карта-пример - maps/sdk_phys_pulleyconstraint.vmf |
phys_convert |
Иногда требуется, чтобы объект был статичным (бездвижным) до определенного момента. Например, у вас на карте есть что-то вроде скалы и вы хотите, чтобы она оставалась неподвижной до того, как произойдет взрыв, и скалы обрушились. Здесь вместо использования phys_constraint, можно применить более простую и нетрудную энтитю phys_convert. Она единовременно (один раз;)) конвертирует статичные энтити в физические: prop_static-энтити превратятся и станут вести себя как prop_physics, а func_brush - как func_physbox. Такой способ уменьшает нагрузку на движок, так как на обработку неподвижных энтитей тратится меньше ресурсов, чем если бы они были изначально физическими объектами и просто скреплены phys_constraint`ом. Карта-пример - maps/sdk_phys_convert.vmf |
phys_ragdollconstraint |
Действует так же, как и phys_constraint, только применяется к ragdoll`ам. Также здесь можно указать минимальный и максимальный углы вращения вокруг осей и силу трения при вращении. Карта-пример - maps/sdk_phys_ragdollconstraint.vmf |
phys_slideconstraint |
Эта энтитя позволяет прикрепленному объекту перемещаться вдоль одной оси так же, как кольца, держащие занавеску, перемещаются по гардине=) Энтитя имеет хелпер, указывающий ось перемещения. Карта-пример - maps/sdk_phys_slideconstraint.vmf |
phys_keepupright |
Эта энтитя поддерживает физические объекты в вертикальном положении, прикладывая для этого к ним вращающую силу. Количество градусов этой силы в секунду в поле "Angular Limit". Чем больше это значение, тем быстрее объект будет возвращаться в исходное положение. Карта-пример - maps/sdk_phys_keepupright.vmf |
phys_spring |
Это физическая симуляция пружины. В поле "Length" указывается ее длина в спокойном состоянии. Если что-нибудь к ней присоединить, то она естественно удлинится. А насколько удлинится можно указать в поле "Spring Constant": чем больше значение, тем меньше растяжение пружины. Карта-пример - maps/sdk_phys_sprint.vmf |
Прочие энтити
phys_magnet |
Эта энтитя действует как магнит, притягивая к себе металлические физические объекты, касающиеся ее. Карта-пример - maps/sdk_phys_magnet.vmf |
phys_motor |
Пытается вращать указанную энтитю с определнной скоротью. Рассматривайте это, как мотор, который осью соединен с вращаемым объектом. Здесь есть величина "load scale", которую можно сравнить с лошадиной силой, т.е. мотор будет пытаться вращать объект с определенной скоростью, но при сопротивлении скорость будет уменьшаться, а когда ничего не будет мешать, снова начнет возрастать. Например, если в этом поле написать "2", то мотор будет прилагать вдвое больше усилий, чтобы восстановить прежнюю скорость. Карта-пример - maps/sdk_phys_motor.vmf |
phys_ragdollmagnet |
Простая энтитя, притягивающая к себе ragdoll`ы. Часто используется для более реалистичной смерти npc. Энтитя может притягивать трупы как к одной точке, так и к целой "панели", т.е. вдоль определенной оси, но не по прямой линии. Карта-пример - maps/sdk_phys_ragdollmagnet.vmf |
phys_thruster |
Эта энтитя служит для приложения к объекту силы вдоль определенной оси. Она работает точно так же, как двигатель ракеты, двигающий ее вперед. Также имеется встроенный таймер, позволяющий указать время, по окончании которого "двигатель" остановится. Карта-пример - maps/sdk_phys_thruster.vmf |
phys_torque |
Энтитя похожа на phys_motor, придает угловую скорость объекту. Также может игнорировать массу объекта и имеет таймер, позволяющей действовать на протяжении некоторого времени, а потом выключиться. Карта-пример - maps/sdk_phys_torque.vmf |
Перевод AndrewDragon`а
Приятного вам маппинга:)
Взято с www.ollective.valve-erc.com
©
2004 Valve Corporation. All rights reserved. Valve, the Valve logo,
Half-Life, the Half-Life logo, the Lambda logo, Steam, the Steam logo,
Team Fortress, the Team Fortress logo, Opposing Force, Day of Defeat,
the Day of Defeat logo, Counter-Strike, the Counter-Strike logo,
Source, the Source logo, Hammer and Counter-Strike: Condition Zero are
trademarks and/or registered trademarks of Valve
Corporation. Microsoft and Visual Studio are trademarks
and/or registered trademarks of Microsoft Corporation. All other
trademarks are property of their respective owners.