Inputs и Outputs

From Valve Developer Community
(Redirected from Inputs and Outputs/ru)
Jump to: navigation, search
English (en)Deutsch (de)Polski (pl)Русский (ru)Español (es)中文 (zh)

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

Обзор

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

Например, энтити logic_timer (Английский) может отправить OnTimer output, которая сработает, когда временное событие сработает для энтити. Output может быть обработан input'ом Show в энтитиenv_sprite (Английский), что сделает её видимой, когда таймер достигнет его назначенного времени. Вы также можете обработать OnTimer output того же таймера (logic_timer (Английский)), привязав к input'у SparkOnce энтити 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 (Английский) спускался на верёвке, вы должны использовать Input BeginRappel.
  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_counter (Английский)'а OutValue 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'ы энтити из консоли. Это бывает очень полезно для тестирования настроек энтитей в реальном времени. Чтобы вызвать input под названием "Open" для энтити с именем "testentity" с параметром input "3", вы должны ввести ent_fire testentity open 3
ent_pause
Эта команда (Английский) приостанавливает энтити карты. Если мы введём снова, энтитям будет возвращено их обыкновенное поведение. Она наиболее полезна с использованием вместе с командой (Английский) ent_step, описанной ниже.
ent_step <number of steps>
Когда используется вместе с консольной командой (Английский) ent_pause, эта команда (Английский) позволяет пользователю замедлить шаги, через которые цепочка энтитей исполняется для input'а и output'а. Любое кол-во шагов может быть выполнено в одно время, что указывается в значение введённым после команды (Английский) (например ent_step 3 исполнит 3 шага сразу же).

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