Inputs and Outputs:ru

From Valve Developer Community
Revision as of 16:00, 3 September 2006 by KindDragon (talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Одно из наиболее главных изменений для создания карт для движка Source были энтити I/O. Тогда как в старой версии движкаe полагались на ключевые поля 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'а.

Отладка

Так как природа того как энтити связаны более сложная и мощная, поэтому в движке имеются возможности для отладки чтобы помочь вам отследить проблемы. Если цепочка 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 шага сразу же).

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

Entity Creation

List of Entities

Targetname

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