Вхождение

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

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

Note.pngПримечание: Для того чтобы вхождения учитывались при компиляции карты, в файле gameinfo.txt(en) должен присутствовать ключ GameData, указывающий на FGD-файл(en) игры. Только в Left 4 Dead 2 Left 4 Dead 2 и более поздних версиях платформы, а также в Team Fortress 2 Team Fortress 2, это сделано по умолчанию. В других играх его необходимо вписать самостоятельно. Также можно использовать предварительную обработку, как описано ниже, но это может быть более затратно(en), если вхождение повернуто под не кратным 90° углом.
Note.pngПримечание: В предшествующих Left 4 Dead 2 Left 4 Dead 2 ветвях платформы, вхождения имели некоторые неработающие или отсутствующие функции: не поддерживалась система ввода/вывода, вхождения не могли быть вложены друг в друга, деформированные поверхности внутри вхождения компилировались неправильно, и любые env_cubemap из вхождений не компилировались в карту.
Note.pngПримечание: При использовании вхождений в исходном файле карты, значение параметра mapversion для скомпилированной карты будет взято из одного из вхождений.

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

  • Они предоставляют более динамичную альтернативу заготовкам(en), так как любые изменения во вхождении карты будут отражены во всех его вхождениях.
  • Они предоставляют альтернативу видовым группам(en), так как с их помощью можно разделить большую, громоздкую карту на несколько более мелких, удобно редактируемых (над которыми могут работать несколько авторов одновременно).
  • Они предоставляют простой способ редактировать участки карты, которые должны располагаться под произвольным углом. Создайте карту на сетке внутри отдельной карты, а затем вставьте её в другую карту с помощью func_instance, повернутого на необходимый угол. Это дешевле(en), чем компилировать карту с повернутой геометрией непосредственно в общем VMF-файле карты, так как при этом получается меньше BSP граней(en) (хотя это может слегка нарушить 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 <выход> <целевой_объект>:<вход_объекта>::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.

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

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