входове и изходи

Логическата входно-изходна система за взаимодействащи обекти в игра е много полезна функция на игровия двигател Source.

Съдържание

Субектите имат два начина за взаимодействие помежду си: изпращане на „изход“ (изход) или приемане на „вход“ (вход) на друг субект. Например, играчът натисна бутона (func_button) - синята светлина (светлина) светна; тоест бутонът изпрати сигнала "изход", за крушката ще бъде "вход" - полученият сигнал. Един изход може да се използва за активиране на множество обекти, т.е. генериране на множество входове. Правилно конфигуриран изход се комбинира с вход във „връзка“, която предава допълнителни параметри на приемника, какво е закъснението преди изходът да бъде изпратен и дали изходът трябва да бъде изпратен по-късно. Изходът може да бъде изпратен към всеки вход и обратно. Това ви позволява да създавате сложни и мощни взаимодействия между обекти.

Като пример, Logic_timer може да изпрати изходOnTimer, когато времето, указано в таймера, изтече. Същият изход може да бъде изпратен -Покажикъм вход на спрайт, който ще стане видим, когато времето изтече. Също така този изход може да бъде изпратен доSparkOnceвход на някой Env_spark, след което той ще пусне искри. Като използвате параметрите на връзката, можете да зададете забавяне преди изпращане на изхода или да го изпратите само веднъж.

За потребители, запознати с първата система за взаимодействие на обекти на Half-Life, параметритеtargetnameиtargetвече са остарели и са подмножество на I/O системата. Trigger_multiple, който можеше да изпраща само един тип сигнал преди, сега има няколко опции:OnStartTouch, OnEndTouch, OnTouchи т.н. Тези изходи могат да бъдат свързани към произволен брой обекти и да имат персонални настройки за свързване (забавяне, еднократно задействанесамо), използването на мулти-мениджъри е отхвърлено, те вече са част от I/O системата. Параметърътkilltargetвече е заменен с входKill.

Изходе събитие, което ще настъпи след промяна на състоянието на обект. Може да е натиснат бутон, таймер, затваряща се врата. За даден обект могат да бъдат зададени произволен брой изходи, което прави възможно активирането му при всякакви възможни условия. Всички изходи са регистрирани в прозорецаСвойства на обекта, в разделаИзходиима всички налични изходи за този обект.

Ето опциите:

  1. Името на изхода.
  2. Името на обекта, до който ще бъде изпратен изходът, т.е. който трябва да бъде активиран.
  3. Името на входа е действието, което обектът ще предприеме, след като приеме изхода.
  4. Параметър overr >Прости изходи

  • OnTrigger- изпраща изход след активиране.
  • OnMapSpawn- изпраща изход, след като картата е заредена.
  • OnNewGame- изпраща резултат след стартиране нанова игра.
  • OnLoadGame- изпраща резултат след зареждане на запис.

Входовесе свързват към изходи от всякакъв тип. В раздела Вход можете да видите всички свързани входове за избрания обект.

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

Ако връзката е зачертана с червена линия, това означава, че тя не е зададена правилно, изходът не съществува в изходния обект или няма даден вход в целтаобразувание. Неправилните връзки не са опасни, но ще се покажат в менюто за грешка Проверка за проблеми.

Резултати и стойности

Някои изходи на обекти са числови стойности, какъвто е случаят с изхода наOutValuemath_counter. Тези изходи са свързани с входове, които приемат параметър и ще попълнят стойност за този параметър, когато бъдат задействани. Напримерmath_counterможе да има следния вход:OutValue mover SetPositionкъдето "mover" е името на func_movelinear. Позицията наmoverможе да се промени с помощта на най-простите аритметични операции math_counter.

Най-простият тригер

Този пример ще покаже как да използвате входове/изходи в случай на тригер при влизане, който ще възпроизведе звук.

Отворете картата и добавете ambient_generic към нея (именувайте я „ambient_1“). В настройките посочете файла, който искате да възпроизведете, задайте първоначалното състояние на изключено. След това поставете върху картата четка, пълна с текстурата "toolstrigger", и я превърнете в обектtrigger_once. Отидете в разделаИзходии щракнете върху бутона "Добавяне".

Задайте параметъра "Моят изход с име" на "OnStartTouch". Това означава, че изходът ще бъде изпратен, когато играчът влезе в четката на спусъка.

Посочете името на обекта, който ще възпроизвежда звука в параметъра „Наименувани целеви обекти“, ние го наричаме „ambient_1“.

Задайте „През този вход“ на „PlaySound“. Това означава, чеambient_genericтрябва да възпроизвежда звука.

Кликнете върху „Приложи“ и затворете прозореца. Сега имаме тригер, веднага щом играчът влезе в него, той ще изпрати командатаambient_generic, която ще възпроизведе звука.

Ако отворите свойстватаambient_genericв разделаInputs, ще видите изхода на тригера, свързан към входаambient_generic.

Преди да компилирате и тествате картата, уверете се, че основните елементи (светлини, стартове на играчи и т.н.) присъстват на нея.

Ако I/O системата на вашата карта не работи както бихте искали, следните конзолни команди ще ви помогнат да намерите грешки:

  • разработчик 0/1/2
Задайте този параметър (cvar) на "2", той ще отпечата на конзолата журнала за взаимодействие в I/O системата.
  • ent_messages_draw 0/1
Тази cvar е настроена на "1", за да показва информация за взаимодействието на обекта на екрана в играта, това е различно от cvar на разработчиците.
  • ent_fire
Тази конзолна команда ви позволява ръчно да изпратите изходен обект от конзолата. Това е много полезно за тестване на настройките на обекта в реално време. Например, за да изключите електрическата крушка с име "light1" въведете:ent_fire light1 turnoff. Можете също така да активирате всеки обект, който попадне във вашия обхват, като посочите името "!picker" в командата.
  • ent_pause
Тази команда спира цялата I/O система на картата. Въведете тази команда отново, за да върнете системата към нормално състояние. Това е особено полезно, когато използвате командата ent_step, описана по-долу.
  • ent_step