Ru/Inputs and Outputs: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
m (tidy)
No edit summary
Line 1: Line 1:
{{translationupdate}}
{{translationupdate}}


Одно из наиболее главных изменений для создания карт для движка Source были энтити I/O. Тогда как в старой версии движкаe полагались на ключевые поля <code>target</code> и <code>targetname</code> отправляли простой импульс энтити, система I/O энтити позволяет более сложное взаимодействие между энтитями. Это делается используя энтити <i>inputs</i> и <i>outputs</i>, которые связаны <i>соединениями</i>. Используя этот простой метод, энтити могут легко переключать события основанные на изменениях состояния и работает в тандеме с другими энтитями в более крошечном, логическом и мощном пути который ранее был возможен.
Одно из наиболее главных изменений для создания карт для движка Source были энтити I/O. Тогда как в старой версии движка полагались на ключевые поля <code>target</code> и <code>targetname</code> отправляли простой импульс энтити, система I/O энтити позволяет более сложное взаимодействие между энтитями. Это делается используя энтити <i>inputs</i> и <i>outputs</i>, которые связаны <i>соединениями</i>. Используя этот простой метод, энтити могут легко переключать события основанные на изменениях состояния и работает в тандеме с другими энтитями в более крошечном, логическом и мощном пути который ранее был возможен.


==Обзор==
==Обзор==
Line 40: Line 40:
==Output'ы со значениями==
==Output'ы со значениями==


Очень мало output'ов которые возвращают значения. К примеру [[math_counter]]'а '''OutValue''' output. Эти output'ы привязаны к input'ам которые требуют параметр и будут заполнять значение для этого параметра когда сработает. К примеру, для [[math_counter]] может быть следующий input: <code>OutValue mover SetPosition &lt;none&gt;</code> где ''mover'' это [[func_movelinear]]. Позиция ''mover'' может быть изменена с помощью простых арифмитических операция [[math_counter]]'а.
Очень мало output'ов которые возвращают значения. К примеру [[math_counter]]'а '''OutValue''' output. Эти output'ы привязаны к input'ам которые требуют параметр и будут заполнять значение для этого параметра когда сработает. К примеру, для [[math_counter]] может быть следующий input: <code>OutValue mover SetPosition &lt;none&gt;</code> где ''mover'' это [[func_movelinear]]. Позиция ''mover'' может быть изменена с помощью простых арифметических операций [[math_counter]]'а.
 
<!--
== Setting up a simple trigger ==
This is an example of how to make a simple trigger using inputs and outputs, so a sound is played when the player enters a specific area.
Open up a map and add an [[ambient_generic]] (naming it "ambient_1"). Go into its properties and choose a sound file for it to play, and in its flags make sure it starts "Off". Select the "toolstrigger" texture and create a cube brush with this texture. Right-click on this brush and using the "[[Brush entity|Tie to Entity]]" command, make it into a <code>trigger_once</code> entity. Go to the outputs tab and click the "Add..." button.
Set "My output named" to "<code>OnStartTouch</code>". This causes the output (and thus the trigger) to occur when the player starts touching this brush in the game.
Set "Targets entities named" to "ambient_1" using the pull-down arrow. This makes the trigger output target the <code>ambient_generic</code> you placed earlier.
Set "Via this input" to "<code>PlaySound</code>". This chooses the <code>PlaySound</code> action from the target <code>ambient_generic</code>'s list of actions, which of course causes its sound to start playing.
Click the "Apply" button to save your changes to the trigger, and close it. Now we have the trigger set up so that as soon as the player touches it, it sends a command to the <code>ambient_generic</code> which makes it start playing its sound.
-->
 
== Создание простого триггера ==
Вот пример, как создать простой триггер, используя input'ы и output'ы. Как только игрок войдёт в определённую зону, воспроизведётся звук.
 
Создайте карту и добавьте [[ambient_generic]] энтити. Назовите её "ambient_1". Зайдите в её свойства и выберите звуковой файл для воспроизведения. Убедитесь, что во флагах стоит "Starts Off". Выберите текстуру "toolstrigger" и создайте прямоугольный браш. Щёлкните правой кнопкой мыши и выберите в меню "[[Brush entity|Tie to Entity]]". В свойствах выберите <code>trigger_once</code> энтити. Во вкладке "Outputs" нажмите кнопку "Add..."
 
Выберите в "My output named" вариант "<code>OnStartTouch</code>". Это создаст output (и это триггер) при соприкосновении игрока и браша в игре.
 
В "Targets entities named" напишите "ambient_1". Триггер будет ссылаться на энтити <code>ambient_generic</code>, которую вы создали раньше.
 
Выберите "<code>PlaySound</code>" в списке "Via this input". Это выберит действие для энтити <code>ambient_generic</code> при создании output'а, и это действие вызовет воспроизведение звука.
 
Нажмите клавишу "Apply", чтобы сохранить изменения в триггере и закройте его. Теперь у нас есть триггер, настроенный на прикосновение игрока и вызывающий команду <code>ambient_generic</code>, которая начинает воспроизводить звук.
 
Если вы откроете свойства <code>ambient_generic</code>, вы можете увидеть, что Output триггера автоматически превратился в Input для <code>ambient_generic</code>.
 
Перед проверкой вашего триггера в игре, убедитесь, что все основные ентити и браши(точка старта игрока, освещение и т.п.) установлены, и вы задали звук для <code>ambient_generic</code>
<!--
If you open up the properties for the <code>ambient_generic</code>, you can see how the Output from the trigger has automatically been converted to an Input for the <code>ambient_generic</code>.
 
If you want to compile and test your new trigger, make sure you have all the basics (player start, lighting, etc) and have assigned a sound effect to the <code>ambient_generic</code>.
-->


==Отладка==
==Отладка==

Revision as of 08:55, 2 July 2008

Template:Translationupdate

Одно из наиболее главных изменений для создания карт для движка Source были энтити I/O. Тогда как в старой версии движка полагались на ключевые поля target и targetname отправляли простой импульс энтити, система I/O энтити позволяет более сложное взаимодействие между энтитями. Это делается используя энтити inputs и outputs, которые связаны соединениями. Используя этот простой метод, энтити могут легко переключать события основанные на изменениях состояния и работает в тандеме с другими энтитями в более крошечном, логическом и мощном пути который ранее был возможен.

Обзор

Энтити содержат два метода для связи: отправляя output другой энтити, или получая input из другой энтити. Одна энтити может отправить output когда она убита другой энтити input который приведет к изменению цвета. Тот же output может использоваться для переключение spawning input другой энтити. Output'ы сопоставляются с input'ами через соединения, которые управляют какие дополнительные данные пересылаются получателю, как долго они задерживаются до того как output получены, и должено ли быть позволено output отправлять повторно позже. Output'ы могуть связаны с любыми input и наоборот. Это позволяет сложные и мощные взаимодействия между энтитями.

Например, энтить logic_timer может отправитьe OnTimer output, которая сработает когда временное событие сработает для энтити. Output может быть обработан Show input в env_sprite, что сделает видимой когда таймер достигнет его назначенного времени. Вы также можете обработать OnTimer output для logic_timer привязав к SparkOnce input энтити env_spark что приведет к испусканию искр. Используя свойства соединения, вы также можете сделать чтоб output срабатывал после двух секундной задержки или сработавала только однажды.

Для пользователей наиболее близкий с оригинальным Half-Life метод связи энтитей, поля targetname и target теперь устарелые и I/O система энтитей обладает расширинной функциональностью. Вместо использования энтити trigger_multiple только срабатывающей для одной энтити назначения, теперь можно использовать любое кол-во его output'ов чтобы делать тоже, включая: OnStartTouch, OnEndTouch, OnTouch и т.д. Эти output'ы могут быть подсоединены к произвольному числу энтитей, с уникальной задержкой на output, делающие мульти-менеджеры устарелыми. Так же поле killtarget теперь заменено соединением output'а Kill к input'у другой энтити.

Output'ы

Hammer entityio1.jpg

Output'ы - это события которые срабатывают когда изменяется состояние энтити. Это может быть таймер достигнувший конца, нажатая кнопка или дверь которая закрылась. Любое кол-во output'ов может быть указано программистом внутри энтити срабатываемых при любом кол-ве критерий. Output'ы указываются на вкладке Outputs свойств энтити. Вкладка Outputs диалога Свойства объекта отображает все output'ы связывающие энтитю с другой энтитей.

  1. Имя срабатываемого output'а.
  2. Имя энтити получаемой output (щелкните на этитю с помощью инструмента Eye Dropper чтобы вставить его имя сюда).
  3. Введите в другой энтите которая получит output. Вы должны выбрать какое действие целевой энтити должно активировать output. К примеру, если вы хотите чтоб солдат npc_combine_s спускался на веревке, вы должны тспользовать BeginRappel input.
  4. Используется перегрузка параметра если данные приняты input'ом назначения. Чаще это число используемое input функцией (смотрите секцию Input'ов ниже).
  5. Установите задержку отправки output'а (в секундах). 1/10 секунды записывается как "0.1" сенкунд.
  6. Срабатывает ли output единожды.

Пример output'ов

  • OnTrigger - Когда энтитя пересекается, она генерирует этот output.
  • OnMapSpawn - Когда карту загружена, этот output срабатывет.

Input'ы

Hammer entityio2.jpg

Input'ы подсоединяются к output'ам любого типа. Здесь мы видим вкладку Inputs диалога Свойства объекта. Она отображаеты все output'ы которые подсоединены из других энтитей к этой энтити.

Так как любой output может быть подсоединен к любому input'у, это множество комбинаций может быть использовано для создания сложных взаимодействий. Таймеры могут создавать последовательность обратного отсчета используя мигающие спрайты, звуки и специальные эффекты всё это без какой либо ниобходимости специальных энтитей. Щелкнув на кнопку Mark или два раза щелкнув на запись в списке, пользователь может прейти к энтити отправляющей output в данный input.

Если соединение отображается красным, оно неправильно. Это означает что output не существует в исходной энтити или input не существует в энтити назначения. Неправильное соединение не смертельно но должно быть устранено до компиляции карты так как команда меню Check For Problems выдаст это как ошибку.

Output'ы со значениями

Очень мало output'ов которые возвращают значения. К примеру math_counterOutValue output. Эти output'ы привязаны к input'ам которые требуют параметр и будут заполнять значение для этого параметра когда сработает. К примеру, для math_counter может быть следующий input: OutValue mover SetPosition <none> где mover это func_movelinear. Позиция mover может быть изменена с помощью простых арифметических операций math_counter'а.


Создание простого триггера

Вот пример, как создать простой триггер, используя input'ы и output'ы. Как только игрок войдёт в определённую зону, воспроизведётся звук.

Создайте карту и добавьте ambient_generic энтити. Назовите её "ambient_1". Зайдите в её свойства и выберите звуковой файл для воспроизведения. Убедитесь, что во флагах стоит "Starts Off". Выберите текстуру "toolstrigger" и создайте прямоугольный браш. Щёлкните правой кнопкой мыши и выберите в меню "Tie to Entity". В свойствах выберите trigger_once энтити. Во вкладке "Outputs" нажмите кнопку "Add..."

Выберите в "My output named" вариант "OnStartTouch". Это создаст output (и это триггер) при соприкосновении игрока и браша в игре.

В "Targets entities named" напишите "ambient_1". Триггер будет ссылаться на энтити ambient_generic, которую вы создали раньше.

Выберите "PlaySound" в списке "Via this input". Это выберит действие для энтити ambient_generic при создании output'а, и это действие вызовет воспроизведение звука.

Нажмите клавишу "Apply", чтобы сохранить изменения в триггере и закройте его. Теперь у нас есть триггер, настроенный на прикосновение игрока и вызывающий команду ambient_generic, которая начинает воспроизводить звук.

Если вы откроете свойства ambient_generic, вы можете увидеть, что Output триггера автоматически превратился в Input для ambient_generic.

Перед проверкой вашего триггера в игре, убедитесь, что все основные ентити и браши(точка старта игрока, освещение и т.п.) установлены, и вы задали звук для ambient_generic

Отладка

Так как природа того как энтити связаны более сложная и мощная, поэтому в движке имеются возможности для отладки чтобы помочь вам отследить проблемы. Если цепочка I/O логики не работает как ожидалось, инструменты указанные ниже вам сильно помогут устранить ошибку.

developer 0/1/2
Установив консольную переменную в значение "2", вы получите подробный отчет о том как энтити взаимодействуют с помощью системы I/O энтитей. Это полезно для определения какое точно цепочка событий занимает место в сложных взаимодействиях.
ent_messages_draw 0/1
Установив консольную переменную в значение "1" отобразит визуальную информацию о том как энтити взаимосвязаны между собой. Это очень похоже на использование консольной переменной developer, но иногда дает более быстрый и интуитивный результат.
ent_fire <entity name> <input name> <input value>
Эта консольная команда позволяет вам вручную срабатывать input'ы энтити из консоли. Это бывает очень полезно для тестирования настроек энтитей в реальном времени. Чтобы сроботать "Open" input для энтити названной "testentity" с параметром input "3", вы должны ввести ent_fire testentity open 3
ent_pause
Этаs команда приостанавливает энтити карты. Если мы введем снова, энтитям будет возвращено их обыкновенное поведение. Она наиболее полезна с использованием вместе с командой ent_step, описанной ниже.
ent_step <number of steps>
Когда используется вместе с консольной командой ent_pause , эта команда позволяет пользователю замедлить шаги через которые цепочка энтитей исполняется для input'а и output'а. Любое кол-во шагов может быть выполнено в одно время, что указывается в значение введенным после команды (например ent_step 3 исполнит 3 шага сразу же).

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

Template:Otherlang:ru Template:Otherlang:ru:en