Эта статья документации для всего, что использует платформу Source. Нажмите для получения дополнительной информации.

Входы и выходы, объектов

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Deutsch (de)Español (es)Polski (pl)Português do Brasil (pt-br)Русский (ru)中文 (zh)Translate (Translate)

Входы и выходы (вместе называемые "I/O", системой ввода/вывода) - это средства, с помощью которых объекты(en) взаимодействуют друг с другом на картах(en). Объекты имеют два метода для связи: отправляя "выход" другому объекту или получая "вход" из другого объекта. Например, один объект может отправить выход, когда он убит другим объектом, вход которого приведёт к изменению его цвета. Тот же выход может использоваться для срабатывания входа создания (spawning) другого объекта. Выходы связываются с входами через "соединения", которые определяют дополнительные пересылаемые данные, время задержки получения данных, и возможность повторной отправки. Выходы могут быть связаны с любыми входами и наоборот. Это позволяет создавать множество комбинаций для получения сложных взаимодействий между объектами. Таймеры могут создавать последовательность обратного отсчёта, используя мигающие спрайты, звуки и специальные эффекты, - и всё это без дополнительных объектов.

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

Входы

Вкладка "Входы" диалогового окна "Свойства объекта" старых версий Hammer

Входы - это команды, которые заставляют объект изменять свои действия. Они "срабатывают" (или "вызываются") выходами - ими нельзя управлять непосредственно.

Справа представлена вкладка Inputs (Входы) диалога Свойства объекта(en) на которой отображаются входы, получаемые объектом от других объектов. Нажав кнопку Mark (Метить) или два раза щёлкнув на записи в списке, пользователь может выделить объект, выход которого направлен в данный вход.

Выходы

Вкладка "Выходы" диалогового окна "Свойства объекта" старых версий Hammer

Выходы - это события, которые срабатывают, когда изменяется состояние объекта. Это может быть logic_timer таймер, достигший конечного значения, нажатая func_button кнопка или дверь(en), которая начала закрываться. Любое количество выходов может быть указано программистом внутри объекта, срабатывающих с любым количеством параметров.

Выходы создаются на вкладке Outputs (Выходы) диалога Свойства объекта(en). Вкладка отображает все имеющиеся выходы, связывающие объект с другими объектами, поля для настройки выбранного выхода и кнопки для создания новых и удаления имеющихся. Кнопка Mark (Метить) аналогично позволяет выделить целевой объект для выбранного выхода.

Поля настройки выхода:

Output name (Имя выхода), условие
Определяет событие, вызывающее срабатывание данного выхода. Например, объект trigger_multiple(en) срабатывает выход OnTrigger, когда персонаж игрока заходит в его объём.
Target entity (Целевой объект)
Целевое имя(en) или имя класса(en) объекта, который получает вход (щёлкните на объект с помощью инструмента Eye Dropper (Пипетка), чтобы вставить его имя сюда). Accepts the * character as a search wildcard.
  • Отображается жирным шрифтом, если указывает на несколько объектов с однаковым целевым именем
  • Оторажается красным цветом, если нет объектов с таким целевым именем
    Warning.pngПредупреждение:Правильные имена класса, регулярные выражения или специальные целевые имена(en) так же будут отображаться красным цветом. Не беспокойтесь, платформа правильно их обработает!
Input name (Имя входа), операция
Имя входа в целевом объекте, который будет переключаться. This too will be context sensitive. For example, if sending an output to a Door entity, some of the available inputs will be "Close" or "Open". Необходимо выбрать, какое действие целевого объекта должен активировать выход. К примеру, если необходимо, чтобы солдат npc_combine_s(en) спускался на верёвке, необходимо выбрать вход "BeginRappel".
Диалоговое окно "Свойства объекта" новых версий Hammer
Parameters (Параметры)
Используется для передачи данных целевому объекту. Параметры могут быть разными: громкость воспроизводимого звука, целевое имя другого объекта или, возможно, цвет. Всё зависит от того, какие входные данные принимаются. Если передача данных не поддерживается поле будет отображаться серым цветом.
Некоторые выходы, например выход OutValue объекта math_counter(en), сами указывают параметры. Чтобы использовать автоматически указываемый параметр, просто оставьте в поле значение <none>. Такие выходы связаны входами объекта, которые требуют параметр и заполнят значение для этого параметра автоматически при срабатывании. К примеру, для math_counter(en) может быть следующий вход: OutValue mover SetPosition <none>, где mover это func_movelinear(en). Позиция mover может быть изменена с помощью простых арифметических операций math_counter(en).
Note.pngПримечание:If the output value is a targetname, remember that it may not be unique!
Time delay (задержка), пауза
Время задержки в секундах от момента события до срабатывания выхода. 1/10 секунды записывается как "0.1" сек.
Fire once only (Срабатывать однократно)
Определяет однократное срабатывание выхода с последующим его удалением из игрового процесса.

Создание простого переключателя

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

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

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

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

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

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

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

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

Отладка

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

Главным из них является само диалоговое окно свойств объекта. Неправильные входы и выходы выделяются красным цветом (смотри предупреждение ↑) в таблицах входов и выходов объекта; значки ввода/вывода в нижней части диалогового окна также изменяются соответствующим образом. Неправильные выходы также отображаются в диалогвом окне Ошибки карты(en) (Alt+P). Рекомендуется проверять наличие проблем перед каждой компиляцией.

Помимо этого, в Hammer существует несколько команд и переменных управления(en), которые помогут обнаружить ошибки в процессе игры на вашей карте:

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

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