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

Една от най-важните промени за двигателя на източника беше I/O обектът. Докато по-старата версия на двигателя разчита на ключовите полета target и targetname, за да изпрати прост импулс към обекта, системата за вход/изход на обекта позволява по-сложни взаимодействия между обектите. Това се прави с входове и output'ov, между които има връзки. Използвайки тази проста техника, обектите могат лесно да превключват събитията въз основа на промени в състоянието и да работят заедно с други обекти по един малък, логичен и мощен начин, който преди беше невъзможен.

Обектите съдържат два метода за комуникация: чрез изпращане изход друг обект или чрез получаване вход от друг обект. Един обект може да изпрати изход, когато е убит от друг обект, чийто вход ще доведе до промяна на цвета. Същият изход може да се използва за активиране на входа за създаване (Хвърляне на хайвера) друг обект. Изходите се преобразуват във входове чрез връзки, които определят какви допълнителни данни се изпращат до получателя, колко дълго се забавят преди получаването на изхода и дали изходът трябва да бъде разрешен за изпращане на заявка по-късно. Изходите могат да бъдат свързани с всеки вход и обратно. Това позволява сложни и мощни взаимодействия между обектите.

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

За потребители, които са използвали оригиналния метод за свързване на обект на Half-Life, целевите имена и целевите полета вече са оттеглени, а системата за вход/изход на обекта има подобрена функционалност. Вместо да използвате обект trigger_multiple, който се задейства само за един целеви обект, вече можете да използвате произволен брой негови изходи, за да направите същото, включително: OnStartTouch, OnEndTouch, OnTouch и т.н. Тези изходи могат да бъдат свързани към произволен брой обекти, с уникално забавяне на изхода, което прави мулти-мениджъри остаряла. Също така полето killtarget вече е заменено чрез свързване на изхода Kill към входа на друг обект.

разработчиците

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

  1. Име на задействания изход.
  2. Името на обекта, който ще получи изхода (щракнете върху обекта с инструмента Eye Dropper, за да поставите името му тук).
  3. Въведете в друг обект, който ще получи изхода. Трябва да изберете кое действие на целевия обект да активира изхода. Например, ако искате войникът npc_combine_s да се спусне по въже, трябва да използвате Input BeginRappel.
  4. Параметърът се претоварва, ако данните се получават от въвеждане на дестинация. По-често това е числото, използвано от функцията за въвеждане (вижте раздела Въвеждане по-долу).
  5. Задайте закъснението за изпращане на изхода (в секунди). 1/10 секунда се записва като "0,1" сек.
  6. Извежда ли огън веднъж.

Примерни изходи

  • OnTrigger - Когато даден обект е пресечен, той генерира този изход.
  • OnMapSpawn - Когато картата се зареди, този изход се задейства.

входове

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

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

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

Изходи със стойности

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

Създаване на прост спусък

Ето пример за това как да създадете прост тригер, като използвате входове и изходи. Веднага след като плейърът влезе в определена зона, се възпроизвежда звук.

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

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

Под „Целеви обекти с име“ напишете „ambient_1“. Спусъкът ще се отнася до същността на ambient_generic, която сте създали по-рано.

Изберете "PlaySound" от списъка "Чрез този вход". Това ще избере действие за околната_генерична същност при генериране на изхода и това действие ще доведе до възпроизвеждане на звука.

Натиснете бутона "Прилагане", за да запазите промените в спусъка и да го затворите. Сега имаме конфигуриран спусък за докосване на играча и извикване на командата ambient_generic, която започва да възпроизвежда звук.

Ако отворите свойствата на ambient_generic, можете да видите, че изходът на спусъка автоматично се е превърнал във вход за ambient_generic .

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

Тъй като естеството на свързването на обектите е по-сложно и мощно, в двигателя има съоръжения за отстраняване на грешки, които да ви помогнат да проследите проблемите. Ако I/O логическата верига не работи както се очаква, инструментите по-долу ще ви помогнат значително да отстраните грешката.

developer 0/1/2 Чрез задаване на променливата на конзолата на "2", получавате подробен отчет за това как обектите взаимодействат с I/O системата на обекта. Това е полезно за определяне точно къде е веригата от събития в сложни взаимодействия. ent_messages_draw 0/1 Ако е зададено на 1, играта ще показва визуална информация за това как обектите са свързани помежду си. Това е много подобно на използването на променливата на конзолата за разработчици, но понякога води до по-бързи и по-интуитивни резултати. ent_fire Тази команда на конзолата ви позволява ръчно да извиквате входове на обекти от конзолата. Това може да бъде много полезно за тестване на настройките на обекта в реално време. За да извикате вход, наречен "Open" за обект, наречен "testentity" с входен параметър "3", трябва да въведете ent_fire testentity open 3 ent_pause Тази команда поставя на пауза обектите на картата. Ако влезем отново, обектите ще се върнат към нормалното си поведение. Това е най-полезно, когато се използва заедно с командата ent_step, описана по-долу. ent_step Когато се използва заедно с конзолната команда ent_pause, тази команда позволява на потребителя да забави стъпките, през които се изпълнява веригата от обекти за въвеждане и извеждане. Може да се извърши произволен брой стъпки наведнъж, което се посочва в стойността, въведена след командата (например, ent_step 3 ще изпълни 3 стъпки незабавно).