Работающие лестницы

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Deutsch (de)Español (es)한국어 (ko)Polski (pl)Русский (ru)中文 (zh)Translate (Translate)

Введение

Во всех играх Source(en) имеются лестницы (кроме Team Fortress 2(en) и Portal 2(en), где их нет), состоящие из модели или браша, и системы невидимых энтить, расположенных рядом. Эти невидимые энтити и создают видимость того, что игрок взбирается по модели/брашу лестницы.

Видимая часть лестницы

Для её создания вы можете использовать

  • энтитю prop_static(en) с моделью лестницы (например, models\props_c17\metalladder001.mdl), или
  • браш с текстурой лестницы (например, metal/metalladder001a).

Система подъёма

Принцип работы системы подъёма зависит от игры, для которой она предназначена. Лестницы в Half-Life 2(en) и Half-Life 2: Deathmatch(en) создаются немного не так, как в ранних играх, они стали удобнее для дизайнеров карт и игроков, а лестницы в Counter-Strike: Source(en) и Day of Defeat: Source(en) реализованы также, как в старых играх. Материал по созданию лестниц для Counter-Strike: Source и Day of Defeat: Source, см. ниже.

Энтити лестницы для Half-Life 2 / Half-Life 2 Deathmatch

Вначале нужно определиться с размером лестницы. Это можно сделать двумя способами: с помощью энтити func_useableladder(en), или устаревшей func_ladderendpoint(en) (которая кратко описана ниже для понимания работы старых карт).

Энтитя func_useableladder разделяется на две под-энтити: начальную и конечную точки (см. рис. 1a). Их позиции можно задавать как в поле значения, так и путём перетаскивания кружка при выделении энтити (см. рис. 1b). Это делается в окне 2D-вида. Начало и конец лестницы могут быть произвольной ориентации и длины (см. рис. 1c). Просто тяните эти точки туда, где должна располагаться лестница.

Рис. 1a – Точки лестницы (используются две func_ladderendpoints)
Рис. 1b – Изменение ориентации
Рис. 1c – Наклон лестницы

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

Сегодня устаревшая сущность func_ladderendpoint состоит лишь из одной конечной точки. Размер лестницы создаётся путём связывания двух func_ladderendpoints, которые указываются в свойствах.

Точки схода

Рис. 2 – Точки схода

Также, вы можете задать точки схода с лестницы (см. Рис. 2). Они создаются с помощью энтити info_ladder_dismount(en). Во время лазания игрок может сойти, нажав клавишу использования (обычно так делается, когда лестница выше двух этажей). В данном же случае игрок сходит сам, просто достигнув одной из точек. Вы можете использовать несколько маркеров info_ladder_dismount, чтобы задавать больше направлений схода с лестницы.

Чтобы избежать возможной путаницы между соседними лестницами, каждая info_ladder_dismount имеет параметр, называемый LadderName, который связывает точку с конкретной лестницей.

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

Полевые испытания

После того, как вы создали лестницу, то можете скомпилировать карту и протестировать её. Если хотите, то в игре можно увидеть энтити лестниц вместе с отладочной информацией, введя в консоли sv_showladders 1, а затем загрузив или перезагрузив нужную карту (введя restart). Будут показаны все начальные и конечные точки лестниц (энтити func_useableladder и func_ladderendpoint), а также точки схода (энтити info_ladder_dismount) (См. Рис. 3a), что поможет вам определить, правильно ли настроены эти энтити, пересекаются ли они с твёрдой геометрией или моделями лестниц (см. Рис. 3b), а также соединяются ли энтити func_ladderendpoint друг с другом.

Рис. 3a – Визуализация в игре (sv_showladders 1)
Рис. 3b – Конечная точка застряла в полу

Как лестница работает в игре

Самый безопасный способ взобраться по лестнице в Half-life 2 – это подойти к её невидимой зоне, и в пределах досягаемости нажать клавишу использования. Это автоматически поставит игрока на лестницу. (Если же просто ходить возле лестницы, то есть большой риск упасть.)

Чтобы сойти с лестницы, вы всегда можете спрыгнуть или нажать клавишу использования. Если у лестницы имеются info_ladder_dismounts, вы легко спешитесь на её концах.

Лестницы для Counter Strike: Source, Day of Defeat: Source и Garry's Mod

Перед объектом/брашем, который должен быть лестницей, как можно ближе нарисуйте ещё один браш, но так, чтобы они не касались. Убедитесь, что ширина/высота поверхности соответствует объекту-лестнице. Покройте этот браш материалом tools/toolsinvisibleladder и преобразуйте в энтитю (CTRL+T). В диалоге Object Properties выберите func_ladder(en). Теперь у вас есть поверхность-лестница в передней части объекта/браша.

Рис. 4 - func_ladder(en) с текстурой tools/toolsinvisibleladder перед лестницей prop_static(en).

Когда вы стоите на лестнице в CS:S, точность вашей стрельбы значительно снижается.

Подобные лестницы используются в Half-Life 1, но они покрыты текстурой AAATRIGGER вместо tools/toolsinvisibleladder.

Лестницы для Counter Strike: Global Offensive

См.:

Лестницы для Left 4 Dead & Left 4 Dead 2

Читайте следующие руководства по созданию лестниц для Left 4 Dead & Left 4 Dead 2:

Оптимизация лестниц

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

  • Если это прямая лестница для HL2 или HL2:DM, то лучший способ зависит от того, нужно ли стрелять сквозь неё. Если нет (например, лестница на стене), то просто измените значение Collisions (столкновения) на Use Bounding Box (использовать рамку-ограничитель). Если да, то выберите значение Not Solid (не твёрдый) и поместите брашевый невидимый Clip (toolsclip), который будет отвечать за столкновения.
  • Если это наклонная лестница для HL2 или HL2:DM, рамка-ограничитель не будет поворачиваться вместе с моделью и станет мешать системе подъёма, в этом случае вам нужно сделать модель лестницы Not Solid, и рядом с ней поместить невидимый повёрнутый браш, покрытый текстурой Clip (toolsclip) или Player Clip (toolsplayerclip) (в зависимости от того, требуется ли стрелять сквозь лестницу).
  • Если это лестница для карт CS:S или DoD:S, вам нужно изменить значение Collisions на Not Solid и создать браш func_ladder поверх модели лестницы, вращая его по необходимости.

На многопользовательских картах лестницы нужно рисовать так, чтобы можно было свободно лазить параллельно поверхности, вдоль которой они проходят. Брашевые лестницы надо преобразовывать в нетвёрдый func_brush(en), чтобы избежать временного "застревания" игроков; модели лестниц зачастую торчат из стены, и когда игрок стоит на такой, это выглядит неправдоподобно. В этом случае лучше использовать два браша с текстурой Player Clip по краям пропа, которые будут выравнивать игрока на модели.

Если ничего другого, то преобразуйте браш лестницы в func_detail(en), чтобы он не разрезал листья.

Примеры

HL2/HL2:DM

(6k)

CS:S/DoD:S

См. также