Ru/Instance: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
mNo edit summary
(Update content and translate)
 
(10 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{otherlang2
{{LanguageBar|title=Вхождение}}
|title=Примеры
'''Вхождение (instance)''' - это {{L|VMF|файл карты}} (<code>.vmf</code>), который используется внутри другой карты через {{ent|func_instance}}, возможно с помощью {{ent|func_instance_parms}} и/или {{ent|func_instance_io_proxy}}.
|en=Instance


}}
{{note|While working inside {{L|Hammer}} for all Source games, instances are currently only supported by the map compilers for {{l4d2|2}}, {{as|2}}, {{portal2|2}}, {{tf2|2}}, {{csgo|2}}, and {{Src13|2}}, and therefore will not work for any other games. To use them in unsupported games, see below.}}


{{stub}}
{{note|In branches before {{l4d2|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 {{ent|env_cubemap}}s inside of an instance will not be compiled into the final map.}}
An '''instance''' is a [[VMF|map (.vmf) file]] referenced inside another map through a [[func_instance]], possibly aided by a [[func_instance_parms]] and/or [[func_instance_io_proxy]].


{{note|While working inside [[Hammer]] for all Source games, instances are currently only supported by the map compilers for {{l4d2}}[[Left 4 Dead 2]], {{as}}[[Alien Swarm]], {{portal2}}[[Portal 2]], {{tf2}}[[Team Fortress 2]], {{csgo}}[[Counter-Strike: Global Offensive]], and Source 2013, and therefore will not work for any other games. To use them in unsupported games, see below.}}
{{note|Referencing an instance in your map will make the compiled map's <code>mapversion</code> keyvalue be taken from one of the instances instead.}}


{{note|In {{tf2}}[[Team Fortress 2]] and Source 2013, 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.}}
Вхождения полезны в различных ситуациях:


Экземпляры полезны во многих отношениях:
* Они предоставляют более динамичную альтернативу {{L|Prefab|заготовкам}}, так как любые изменения во вхождении карты будут отражены во всех его вхождениях.
* Они предоставляют альтернативу {{L|Grouping and VisGrouping|видовым группам}}, так как с их помощью можно разделить большую, громоздкую карту на несколько более мелких, удобно редактируемых (над которыми могут работать несколько авторов одновременно).
* Они предоставляют простой способ редактировать участки карты, которые должны располагаться под произвольным углом. Создайте карту на сетке внутри отдельной карты, а затем вставьте её в другую карту с помощью {{ent|func_instance}}, повернутого на необходимый угол. '''Это {{L|cheap|дешевле}}, чем компилировать карту с повернутой геометрией непосредственно в общем VMF-файле карты''', так как при этом получается меньше [[Ru/BSP (Source)#Браши и брашсайды|BSP граней]] (хотя это может слегка нарушить [[QPhysics]], например, сделать невозможным [[Surf|скольжение]]).
* Они предоставляют способ работать с картами на нескольких платформах, как например версии {{L|Left 4 Dead}} и {{L|Left 4 Dead 2}} одной и той же карты.


* Они предоставляют более динамичную альтернативу [[prefabs]], так как любые изменения в экземпляре карты будут отражены во всех его экземплярах.
== Входы/выходы вхождений ==
* Они предоставляют альтернативу [[visgroups]], так как их можно использовать для разделения большой, громоздкой карты на несколько более мелких, управляемых (которые могут даже обрабатываться несколькими авторами одновременно).
* Они предоставляют простой способ редактировать части карты, которые должны быть под неортогональным углом. (Постройте карту на сетке внутри отдельной карты, а затем скопируйте ее на другую карту с помощью [[func_instance]], повернутого на правильный угол.
* They provide a way for maps to work on multiple platforms, such as [[Left 4 Dead]] and [[Left 4 Dead 2]] versions of the same map.


==How to==
=== Через func_instance_io_proxy ===
In Portal 2 to give input to an entity within a instance use this:
В {{l4d2|2}} и более поздних версиях вхождения могут отправлять и получать входы и выходы. Для использования этого функционала в экземпляре должна присутствовать и правильно настроен объект {{ent|func_instance_io_proxy}} с именем <code>proxy</code>. Чтобы отправить входные данные объекту внутри вхождения, нужно использовать следующий выход:
::{| class=standard-table
::{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
|-
| [[Image:Io11.png]] || <Output> || <Instance> || instance:<entity>;<input> || <none> || 0.00 || No
| [[File:Io11.png]] || <выход> || <instance> || instance:<объект>;<вход> || <none> || 0.00 || No
|}
|}


Or, alternatively, you can do this:
Чтобы получить выходные данные от объекта во вхождении, будет использоваться этот выход {{ent|func_instance}}:
 
::{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[File:Io11.png]] || instance:<объект>;<выход> || <другой объект> || <вход> || <none> || 0.00 || No
|}
 
{{note|Hammer должен автоматически обрабатывать эти входы и выходы. Они могут отображаться как нерабочие, но будут работать во время игры.}}
 
=== Без func_instance_io_proxy ===
В играх до Left 4 Dead 2 нет подмены входов/выходов, поэтому в этих играх (или если подмены входа/выхода необходимо избегать по другой причине) вход/выходы вхождения должен выполняться вручную. Для входов необходимо непосредственно указывать конкретное имя объекта.
 
::{| class=standard-table
::{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
|-
| [[Image:Io11.png]] || <Output> || <Instance>-<entity> || <input> || <none> || 0.00 || No
| [[File:Io11.png]] || <выход> || <исправленное>-<объект> || <вход> || <none> || 0.00 || No
|}
|}


== Manifests ==
Для выходов {{ent|logic_auto}} можно использовать [[AddOutput]], чтобы добавить выходы к объекту внутри вхождения.
{{todo|}}
 
::{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[File:Io11.png]] || OnMapSpawn || <исправленное>-<объект> || AddOutput || <выход> <target_ent>:<target_input>::0:-1 || 0.00 || No
|}
 
{{note|При использовании [[TeamSpen's Hammer Addons|HammerAddons]], вместо этого нужно использовать объект <code>comp_kv_setter</code>, чтобы выходы добавлялись во время компиляции, а не во время запуска игры.}}
{{note|Hammer не обрабатывает данные входы автоматически и отображает их как нерабочие, но они будут работать во время игры. Если для исправления имени объекта во вхождении установлено значение Postfix, то исправленное имя и имя объекта следует поменять местами.}}
 
== Декларации (сборники) ==
Вхождения можно усовершенствовать, используя совместно с '''декларациями (manifests)'''. Декларация разделяет содержимое карты на специальные вхождения, так называемые "подкарты". В отличие от обычных вхождений Hammer может переключаться между подкартами без открытия отдельных VMF-файлов. Подкарты рассматриваются как расширения самой карты и не могут подменять имена объектов или иметь смещения, но подкарты могут использоваться в разных декларациях одновременно.
 
Декларации могут быть полезны в различных ситуациях:
* Они позволяют разным людям работать над картой одновременно.
* Они помогаются защитить карты от повреждений, как например проблемы с VMF-файлом, фактически ограниченным одной подкартой.
* Их можно использоваться для удобного именования разных частей карты.
* Они могут упростить отслеживание исходных файлов карты в программах контроля версий наподобие Git.
 
Декларацию можно создать в меню "Instancing".
 
{{note|Декларации не поддерживаются в {{hammerpp|2}}. Вместо этого были дополнены инструменты вхождений, чтобы предоставить аналогичный декларациям функционал. <code>Tools -> Convert Instance to Selection</code> can be used to convert selections to instances. Middle clicking an instance in 3D view or clicking <code>Edit Instance (preview)</code> in object properties will allow editing the instance with the main map shown relative in the views.}}
 
{{warning|Manifests should be mostly functional in any{{confirm}} version of Hammer, but in most games, [[VBSP]]'s support for manifests is unfinished and cannot compile them properly. [https://tf2maps.net/downloads/vmmc.3660/ VMMC] can collapse manifests into a single VMF before compilation, which fixes many of these issues.}}
{{fix|For {{Game link|Source 2013}} mods, many of VBSP's issues can be fixed with code modifications. [https://github.com/DeathByNukes/source-sdk-2013 This fork by DeathByNukes] includes several overall manifest fixes. [https://github.com/mapbase-source/source-sdk-2013 Mapbase's repository] modifies these fixes to work in {{Game link|Half-Life 2}} mapping and also incorporates instancing fixes intended for manifests.|code}}


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


To use instances in unsupported Engine versions, [http://steamcommunity.com/id/metapyziks Metapyziks] wrote a program that merges used instances with the main VMF.
Для использования вхождений в неподдерживаемых версиях платформы, [http://steamcommunity.com/id/metapyziks Metapyziks] написал программу, которая объединяет используемые вхождения с основным VMF-файлом непосредственно перед компиляцией. This was originally created to enable instance support in older engine branches, but the <code>GameData</code> 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.
* [https://github.com/Metapyziks/VMFInstanceInserter Set up tutorial and source code]
* [https://github.com/Metapyziks/VMFInstanceInserter Set up tutorial and source code]
* [https://github.com/Metapyziks/VMFInstanceInserter/releases VMFII releases]
* [https://github.com/Metapyziks/VMFInstanceInserter/releases VMFII releases]


== Also see ==
== Смотреть также ==
* [[L4D2 Level Design/VMF Instances]] - A Valve tutorial on how to use instances in Left 4 Dead 2.
* {{L|L4D2 Level Design/VMF Instances}} - Инструкция от Valve об использовании вхождений в {{l4d2|2}}.
* [[Working with instances]] - A tutorial on how to use instances in Portal 2.
* {{L|Working with instances}} - Инструкция об использовании вхождений в {{Portal2|2}}.


== External links ==
== Внешние ссылки ==
* [http://www.youtube.com/watch?v=YvSZ2NEX1Y0 Source SDK Tutorial - Manifest Tool (YouTube)]
* [http://www.youtube.com/watch?v=YvSZ2NEX1Y0 Source SDK Tutorial - Manifest Tool (YouTube)]
* [http://tf2maps.net/threads/mapping-collaboration-or-using-manifest-and-version-control.24787/ Manifests and Version Control Tutorial (TF2Maps.net)]
* [http://tf2maps.net/threads/mapping-collaboration-or-using-manifest-and-version-control.24787/ Manifests and Version Control Tutorial (TF2Maps.net)]
* [https://tf2maps.net/downloads/vmmc.3660/ Valve Map Manifest Collapser (VMMC)]


[[Category:Glossary]]
{{ACategory|Glossary}}
[[Category:Level Design]]
{{ACategory|Level Design}}
[[Category:Left 4 Dead 2]]
{{ACategory|Left 4 Dead 2}}
[[Category:Alien Swarm]]
{{ACategory|Alien Swarm}}
[[Category:Portal 2]]
{{ACategory|Portal 2}}
[[Category:Instances|*]]
[[Category:Instances|*]]
[[Category:Russian]]

Latest revision as of 10:14, 31 May 2025

English (en)Русский (ru)中文 (zh)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.

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

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