Вхождение

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Русский (ru)Translate (Translate)

Вхождение (instance) - это файл карты(en) (.vmf), который используется внутри другой карты через func_instance, возможно с помощью func_instance_parms и/или func_instance_io_proxy.

Note.pngПримечание:While working inside Hammer(en) for all Source games, instances are currently only supported by the map compilers for Left 4 Dead 2 Left 4 Dead 2, Alien Swarm Alien Swarm, Portal 2 Portal 2, Team Fortress 2 Team Fortress 2, Counter-Strike: Global Offensive Counter-Strike: Global Offensive, and Source 2013 Source 2013, and therefore will not work for any other games. To use them in unsupported games, see below.
Note.pngПримечание:In branches before Left 4 Dead 2 Left 4 Dead 2, instances have some broken or missing functionality: instance I/O system is unsupported, instances cannot be nested, displacements within an instance may not compile properly and any env_cubemaps inside of an instance will not be compiled into the final map.
Note.pngПримечание:Referencing an instance in your map will make the compiled map's mapversion keyvalue be taken from one of the instances instead.

Вхождения полезны в различных ситуациях:

  • Они предоставляют более динамичную альтернативу заготовкам(en), так как любые изменения во вхождении карты будут отражены во всех его вхождениях.
  • Они предоставляют альтернативу видовым группам(en), так как с их помощью можно разделить большую, громоздкую карту на несколько более мелких, удобно редактируемых (над которыми могут работать несколько авторов одновременно).
  • Они предоставляют простой способ редактировать участки карты, которые должны располагаться под произвольным углом. Создайте карту на сетке внутри отдельной карты, а затем вставьте её в другую карту с помощью func_instance, повернутого на необходимый угол. Это дешевле(en), чем компилировать карту с повернутой геометрией непосредственно в общем VMF-файле карты, так как при этом получается меньше BSP граней (хотя это может слегка нарушить QPhysics, например, сделать невозможным скольжение).
  • Они предоставляют способ работать с картами на нескольких платформах, как например версии Left 4 Dead(en) и Left 4 Dead 2(en) одной и той же карты.

Входы/выходы вхождений

Через func_instance_io_proxy

В Left 4 Dead 2 Left 4 Dead 2 и более поздних версиях вхождения могут отправлять и получать входы и выходы. Для использования этого функционала в экземпляре должна присутствовать и правильно настроен объект func_instance_io_proxy с именем proxy. Чтобы отправить входные данные объекту внутри вхождения, нужно использовать следующий выход:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png <выход> <instance> instance:<объект>;<вход> <none> 0.00 No

Чтобы получить выходные данные от объекта во вхождении, будет использоваться этот выход func_instance:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png instance:<объект>;<выход> <другой объект> <вход> <none> 0.00 No
Note.pngПримечание:Hammer должен автоматически обрабатывать эти входы и выходы. Они могут отображаться как нерабочие, но будут работать во время игры.

Без func_instance_io_proxy

В играх до Left 4 Dead 2 нет подмены входов/выходов, поэтому в этих играх (или если подмены входа/выхода необходимо избегать по другой причине) вход/выходы вхождения должен выполняться вручную. Для входов необходимо непосредственно указывать конкретное имя объекта.

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png <выход> <исправленное>-<объект> <вход> <none> 0.00 No

Для выходов logic_auto можно использовать AddOutput, чтобы добавить выходы к объекту внутри вхождения.

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnMapSpawn <исправленное>-<объект> AddOutput <выход> <target_ent>:<target_input>::0:-1 0.00 No
Note.pngПримечание:При использовании HammerAddons, вместо этого нужно использовать объект comp_kv_setter, чтобы выходы добавлялись во время компиляции, а не во время запуска игры.
Note.pngПримечание:Hammer не обрабатывает данные входы автоматически и отображает их как нерабочие, но они будут работать во время игры. Если для исправления имени объекта во вхождении установлено значение Postfix, то исправленное имя и имя объекта следует поменять местами.

Декларации (сборники)

Вхождения можно усовершенствовать, используя совместно с декларациями (manifests). Декларация разделяет содержимое карты на специальные вхождения, так называемые "подкарты". В отличие от обычных вхождений Hammer может переключаться между подкартами без открытия отдельных VMF-файлов. Подкарты рассматриваются как расширения самой карты и не могут подменять имена объектов или иметь смещения, но подкарты могут использоваться в разных декларациях одновременно.

Декларации могут быть полезны в различных ситуациях:

  • Они позволяют разным людям работать над картой одновременно.
  • Они помогаются защитить карты от повреждений, как например проблемы с VMF-файлом, фактически ограниченным одной подкартой.
  • Их можно использоваться для удобного именования разных частей карты.
  • Они могут упростить отслеживание исходных файлов карты в программах контроля версий наподобие Git.

Декларацию можно создать в меню "Instancing".

Note.pngПримечание:Декларации не поддерживаются в Hammer++ Hammer++. Вместо этого были дополнены инструменты вхождений, чтобы предоставить аналогичный декларациям функционал. Tools -> Convert Instance to Selection can be used to convert selections to instances. Middle clicking an instance in 3D view or clicking Edit Instance (preview) in object properties will allow editing the instance with the main map shown relative in the views.
Warning.pngПредупреждение:Manifests should be mostly functional in any[подтвердить] version of Hammer, but in most games, VBSP's support for manifests is unfinished and cannot compile them properly. VMMC can collapse manifests into a single VMF before compilation, which fixes many of these issues.
Cpp.pngИсправление кода:For Source 2013 Source 2013 mods, many of VBSP's issues can be fixed with code modifications. This fork by DeathByNukes includes several overall manifest fixes. Mapbase's repository modifies these fixes to work in Half-Life 2 Half-Life 2 mapping and also incorporates instancing fixes intended for manifests.

Предварительная обработка (для любой игры Source)

Для использования вхождений в неподдерживаемых версиях платформы, Metapyziks написал программу, которая объединяет используемые вхождения с основным VMF-файлом непосредственно перед компиляцией. This was originally created to enable instance support in older engine branches, but the GameData method has since rendered it mostly obsolete. However, it would theoretically be possible for someone to fork the program to add additional functionality, such as instance I/O support or the ability to toggle VisGroups with a fixup variable.

Смотреть также

Внешние ссылки