Sidebar

Inputs и Outputs — CSM Wiki

  • Наступило лето и у нас стартовал конкурс с призовым фондом в $120!
    "De-Make It!" Summer Contest.

Логическая система Ввода/Вывода (Inputs/Outputs) взаимодействия объектов в игре очень полезная особенность игрового движка Source.

Обзор

Энтити имеют два способа взаимодействия друг с другом: отправка "output" (вывода) или принятие "input" (ввода) другой энтити. К примеру, игрок нажал на кнопку (func_button) — загорелась синяя лампочка (light); то есть кнопка послала сигнал "аутпут", для лампочки это будет "инпут" — получаемый сигнал. Один аутпут может быть использован для активации нескольких объектов, то есть породить несколько инпутов. Правильно настроенный аутпут объединяется с инпутом в "соединение", которое передаёт дополнительные параметры приёмнику, какова задержка перед тем, как отправить аутпут, и должен ли будет аутпут послан позже. Аутпут может быть послан любому инпуту и наоборот. Это позволяет создавать сложные и мощные взаимодействия между энтити.

Как пример Logic_timer может послать OnTimer аутпут, когда истечёт время указанное в таймере. Этот же аутпут может быть направлен — Show инпуту спрайта, который станет видимым когда истечёт время. Так же этот аутпут может быть послан SparkOnce инпуту какого-нибудь Env_spark, после чего он выпустит искры. Используя параметры соединения, вы можете задать задержку перед отправкой аутпута или послать его только один раз.

Для пользователей, знакомых с системой взаимодействия энтити первой Half-Life, параметры targetname и target теперь устарели и стали подмножеством системы I/O. Trigger_multiple, который мог раньше посылать только однотипный сигнал, теперь имеет несколько вариантов: OnStartTouch, OnEndTouch, OnTouch и т.д. Эти аутпуты могут быть подключены к любому числу энтити и иметь персональные настройки соединения (Delay, Fire once only), использование мульти-менеджеров устарело, теперь они стали частью системы I/O. Параметр killtarget теперь заменён Kill инпутом.

Output

Аутпут — событие, которое произойдёт после изменения статуса энтити. Это может быть нажатая кнопка, таймер, закрывашаяся дверь. Для энтити может быть задано любое количество аутпутов, это даёт возможность активировать её по любому возможному условию. Все аутпуты прописываются в окне Object Properties, во вкладке Outputs находятся все доступные оутпуты для данной энтити.

Здесь находятся параметры:

  1. Имя аутпута.
  2. Имя энтити, которой будет послан аутпут, то есть которую нужно активировать.
  3. Имя инпута — это действие, которое совершит энтити после принятия аутпута.
  4. Parameter override to use if data is accepted by the target input. Often this is a number used by the input function (see Inputs section below).
  5. Задержка перед отправкой аутпута.
  6. Поставте здесь галочку, чтобы послать аутпут только один раз.

Простейшие аутпуты

  • OnTrigger — посылает аутпут после активации.
  • OnMapSpawn — посылает аутпут после загрузки карты.
  • OnNewGame — посылает аутпут после начала новой игры.
  • OnLoadGame — посылает аутпут после загрузки сохранения.

Input

Инпуты соединяются с аутпутами любого типа. Во вкладке Input можно увидеть все подключенные инпуты для выбранной энтити.

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

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










Аутпуты и значения

Аутпутами некоторых энтити являются числовые значения, как в случае с OutValue аутпутом math_counter'а. These outputs are linked to inputs that take a parameter, and will fill in a value for that parameter when triggered. Например math_counter может иметь следующий инпут: OutValue mover SetPosition <none> где "mover" имя func_movelinear. Позиция mover может изменяться с помощью простейших арифметических операций math_counter.

Простейший триггер

Этот пример покажет как использовать инпуты/аутпуты в случае с триггером войдя в который будет проигрываться звук.

Откройте карту и добавте на неё ambient_generic (назовите его "ambient_1"). В настройках укажите файл который нужно проиграть, установите выключенное начальное состояние. Затем разместите на карте браш закрашенный текстурой "toolstrigger", обратите его в trigger_once энтити. Перейдите на вкладку Outputs и нажмите кнопку "Add...".

Установите параметр "My output named" на "OnStartTouch". Это означает что аутпут быдет послан когда игрок войдёт в браш триггера.

Укажите имя энтити которая будет проигрывать звук в параметре "Targets entities named", она у нас называется "ambient_1".

В параметре "Via this input" укажите "PlaySound". Это означает что ambient_generic должен проиграть звук.

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

Если вы откроете свойства ambient_generic во вкладке Inputs вы увидите аутпут триггера подключенный к инпуту ambient_generic.

Перед тем как скомпилировать и проверить карту, убедитесь что на ней присутствуют базовые энтити (свет, старты игроков и т.д.).

Отладка

Если система I/O на вашей карте работает не так как вам хотелось бы следующие консольные команды помогут вам найти ошибки:

  • developer 0/1/2
Установите этот параметр (cvar) на "2", он выведет в консоль лог взаимодействия в системе I/O.
  • ent_messages_draw 0/1
Этот квар установленный на "1" чтобы вывести информацию о взаимодействии энтити на экран в игре, этим он отличается от developer квара.
  • ent_fire <имя энтити> <имя инпута> <значение инпута>
Эта консольная команда позволяет вручную из консоли посылать аутпут энтити. Это очень полезно для тестирования настроек энтити в реальном времени. К примеру чтобы выключить лампочку с именем "light1" введите: ent_fire light1 turnoff. Так же вы можете активировать любую энтити попавшую в ваш прицел указав в команде имя "!picker".
  • ent_pause
Эта команда останавливает всю систему I/O на карте. Введите эту команду снова чтобы вернуть систему в нормальное состояние. Это особенно полезно при использовании ent_step команды, описанной ниже.
  • ent_step <шаг>
Триггер активирующий 4 env_explosion
Используя вместе с ent_pause, команда ent_step задаёт колличество "шагов" — активируемых аутпутов за один раз. На рисунке справа показана таблица аутпутов trigger_multiple, введя команду ent_pause, а затем ent_step 2 активируются первые 2 аутпута из списка, введя еще раз активируются следующие два аутпута 3 и 4 из списка и т.д.

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

Статья взята с ValveDev