Input/Output System

Wer kennt nicht den alten Half-life1 Eintrag „target“, mit dem man mühsam immer nur ein bestimmtes Entitiy für eine bestimmte Aktion triggern konnte. Das sehr komplexe Input/Output System von Half-life² bietet sehr viel mehr Möglichkeiten. Mithilfe dieser Systeme können alle Entities in den unterschiedliche Situationen verschiedene Entities triggern. Fast jedes Entity hat zwei Möglichkeiten mit anderen Entities zu kommunizieren. Es kann ein Output versenden oder ein Input empfangen. Ein Entity sendet z.B ein Onkilled Output (was bedeutet dass das Entity „gekillt“ wurde) an ein anderes, das durch den Input eine bestimmte Sache ausführt.

Das ist natürlich nicht nur mit dem Kill-Beispiel möglich, sondern mit vielen anderen Sachen. Wer jetzt die alte Half-life Methode noch kennt, möge vielleicht das hier helfen: Ein trigger_once hat nicht mehr einfach ein target, wenn man in den trigger hineinläuft, sondern mehrere Outputs wie zum Beispiel OnStartTouch, OnTrigger oder OnEndTouch. Unter anderem werden durch diese Methoden die bekannten (und bei manchen sicherlich verhassten :D ) multi_manager nutzlos.

Outputs

Outputs sind ausgehende Signale, die von einem Entity gesendet werden, sobald sich sein Zustand ändert. Das kann ein gedrückter Knopf sein oder eine Tür die sich gerade fertig geschlossen hat. In dem Outputs Tab kann man neue Outputs festlegen und sieht auch alle schon bestehenden Outputs

trigger.jpg

Drückt man auf add, fügt man einen neuen Output hinzu, aber ich denke das ist selbsterklärend. Bei dem neuen Output gibt es dann unten mehrere Einstellmöglichkeiten:

  • My Output named: Wählt hier in der Liste den passenden Output, bei mir ist das OnTrigger, weil ich den Output auslösen will, sobald jemand in den Trigger hineinläuft, also ihn auslöst.
  • Targets entities named: Der Name des Entitys, an den der Output gesendet wird. Hier können verschiedene Variablen für dynamische Targets gesetzt werden:
    • !player - Der Spieler selbst. !player für Singeplayer, Player für alle Spieler im Multiplayer
    • !activator - Verlinkt auf das Entity, das den Output am ersten Entity ausgelöst hat.
    • !caller - Verlinkt wieder auf das erste Entity, das die Outputs veranlasst hat.
    • !self - Das Ziel ist das selbe Entity, in dem das Targetname angegeben wird
    • !pvsplayer - Das Ziel ist das erste Entity, das in dem aktiven PVS gefunden wird.
    • !speechtarget - Das Ziel ist ein Entity, das von dem Entity von dem der Output ausgeht, „angesehen“ wird.
    • !picker - Das Ziel ist das Entity, das in diesem Moment vom Spieler angesehen wird. (Keine Non-Solid-Entities)
  • Via this Input: Das ist der Befehl, welchen das Entity (bei mir laser) ausführen soll. Bei mir ist das TurnOn; somit wird der Laser aktiviert.
  • After a delay in seconds of: Wenn der Output nicht sofort gesendet werden soll, sondern nach x Sekunden (hier 0.5 Sekunden)
  • Fire Once Only: Ob der Output nur einmal abgegeben werden kann.


Wenn das Zielentity vorhanden ist, erscheint der Text schwarz, sollte es das Entity nicht geben, bleibt der Text rot. Sobald der Output vollständig ist, ist links unten so ein schwarzer Pfeil. Am Anfang ist dort noch ein roter Balken durchgezogen, weil der Output noch nicht funktionierte. Wenn dieser Balken verschwindet, wisst ihr, dass der Output richtig funktioniert. Übrigens kommt ihr mit einem Klick auf diesem Pfeil zu eurem Zielentity.

Inputs

Bei dem Inputs Tab werden alle hereinkommende Signale angezeigt.

input.jpg

Mit einem Doppelklick auf den Eintrag springt man automatisch zu dem Entity, der den Output sendet (hier der trigger_once). Ist der Input rot angezeigt, funktioniert er nicht. Es gibt dann entweder den Output oder den Input nicht, deswegen gebt immer erst den Namen des Zielentities ein, und wählt dann den Eintrag aus.

Debuggen der Verbindungen

Im Editor

Um zu überprüfen, ob alle Outputs/Inputs in Ordnung sind, drückt einfach mal alt+p, denn fehlerhafte Verbindungen werden dort angezeigt.

Ingame

Auch innerhalb des Spiels gibt es Möglichkeiten, die I/O's zu überprüfen. Dafür gibt es einige Consolenbefehle:

  • ent_developer 2 - Dieser Befehl gibt einen ausführlichen Bericht über alle I/O-Verbindungen aus. Sehr hilfreich bei komplexen Verbindungen.
  • ent_messages_draw 1 - Vergleichbar mit dem ent_developer Befehl, allerdings stellt dieser Befehl die Verbindungen visuell dar. Dadurch bekommt der Benutzer ein besseres Bild.
  • ent_fire (Name des Zielentity, Name des Inputs, Wert des Inputs) - Dieser Befehl erlaubt es, noch ingame Inputs zu feuern. Sehr hilfreich um die Einstellungen der Entities zu überprüfen.
  • ent_pause - Dieser Befehl pausiert die gesamte Kommunikation zwischen Entities. Wenn der Befehl nochmal eingegeben wird, machen die Entities ganz normal weiter. Sehr hilfreich in Kombination mit dem env_step-Befehl.
  • ent_step - Wenn dieser Befehl zusammen mit dem ent_pause-Befehl benutzt wird, wird langsam nach und nach die Verbindungen durchgegangen. Der Benutzer kann mithilfe einer Ziffer hinter dem Befehl die Anzahl der Verbindungen, die auf einmal aufgebaut werden, bestimmtem (ent_step 2 → 2 Verbindungen auf einmal)

Querlinks / Verwandte Themen

  • Inputs/Outputs - Eine Liste verschiedener In- und Outputs und deren Definition.

Bemerkungen / Beispiele

  • Mit der Target-Variable !activator lässt sich zum Beispiel der Spieler, ein NPC, etc ansprechen, welcher eine Kiste zerstört. So könnte der Spieler oder NPC mit einem env_entity_igniter angezündet werden, sobald die Kiste zerbricht.
Die Verwendung aller Dokumente einschließlich der Abbildungen ausschließlich zu nichtkommerziellen Zwecken. Verbreitung des Dokuments auf Speichermedien, (insbesondere auf CD-ROMs als Beilage zu Zeitschriften und Magazinen oder sog. "Mission-Packs" etc.) ist untersagt.
 
half-life_2/tutorials/input_output.txt · Zuletzt geändert: 2011/05/24 09:29 von Adrian_Broher