Community-Tutorials (Source)

Buttons für Türen

Willkommen zu meinen ersten und sicherlich nicht letzten Tutorial. In diesem erkläre ich euch wie ihr Schritt für Schritt die bekannten Buttons erstellt und damit man Türen öffnen lässt wenn ihr ihr zum Beispiel euren Companion-Cube drauf stellt. So und los geht’s...

Schritt 1: Der Button

Die Base

Als erstes bevor wir den eigentlichen Button erstellen, benötigen wir natürlich erstmal die Base des Buttons. Erstellt also ein prop_static -Entity und sucht da unter den Properties den Eintrag World Model . Mit Browse öffnet ihr den Model Browser in dem ihr das Base-Model button_base_references.mdl raus sucht. Mit OK bestätigt ihr das Ganze.

Button func_door

Nun bringen wir mit Hilfe des Entitys func_door den Knopf, der gleich noch folgt zum bewegen. So erstellt ihr ihr ein Brush in Form eines Zylinders, belegt ihn mit der Textur tools/toolsnodraw und platziert ihn innerhalb der Base. In den Standardmaps hat der Zylinder eine Größe von 58x58x8, womit er bündig mit den auf den Boden liegt. Jetzt macht ihr noch aus den Brush ein func_door ( Rechtsklick auf den Brush > Tie to Entity ) und gibt ihn ein einheitlichen Namen wie zum Beispiel button_01_door. Nun beschäftigen wir uns aber erstmal mit anderen Entitys und kommen auf das func_door später zurück.

stefan001.jpg

Das func_door in der Base.

Der Button

Nun erstellen wir den eigentlichen Button auf den ihr später eure Cubes abstellen könnt. Erstellt das Entity prop_dynamic und wählt als Model models/props/button_top_reference.mdl . Außerdem setzt ihr unter Parent (ebenfalls unter den Properties) das func_door , welches wie vorher mit den Namen button_01_door belegt haben ein. Nun platziert ihr noch den Knopf mittig in der Base. Passt aber auf das der Knopf nicht zu tief sitzt und noch Platz zum Boden hat damit er sich ja hoch und runter bewegen kann.

Ambient_generic

Damit auch standardmäßig ein Sound abgespielt wird wenn ihr den Button betätigt, platziert ihr ein ambient_generic in der Nähe des Buttons mit den folgenden Eigenschaften:

[Property Name] --> [Value]

Name : button_01_up
Sound Name : Portal.button_up
SourceEntityName : button_01_door

Wie der Name des Sounds es schon vermuten lässt, ist dieser dafür da wenn der Button sich nach oben bewegt. So brauchen wir also noch ein ambient_generic für den Sound wenn der Button runter gedrückt wird. Dieses Entity belegt ihr nun mit diesen Eigenschaften:

[Property Name] --> [Value]

- Name : button_01_down
- Sound Name : Portal.button_down
- SourceEntityName : button_01_door


Deine Sounds sind jetzt gesetzt!

filter_activator_name

Damit der Button auch nur betätigt wird wenn wir einen Cube drauf stellen und keine anderen Physik-Objekte, binden wir noch das Entity filter_activator_name ein. Klingt etwas kompliziert, ist es aber überhaupt nicht.Erstellt dieses Entity und ändert nun wie gewohnt die Enstellungen auf die folgenden Werte:

[Property Name] --> [Value]

Name : filter_boxes
Filter mode : Allow entities that match criteria
Filter Name : box


Versichert euch aber nun immer, dass alle eure Cubes den Namen box tragen, da sie ansonsten vom Filter nicht wahrgenommen und mit den Button nicht funktionieren werden.

trigger_multiple

Nun habt ihr es fast geschafft und der Button ist fast fertig. Was jetzt noch fehlt, sind 2 Trigger und die Output-Einstellungen um alle Entitys mit einander zu verbinden. Kommen wir aber nun erstmal zu den 2 Trigger. Erstellt also einen Brush in Form eines Zylinders, passt ihn der Größe des Buttons an. Natürlich sollte er nicht zu groß sein sein, da der Button nur aktiviert werden soll wenn der Spieler richtig drauf steht. Dafür benutzte ich die Größenwerte 58x58x2. Anschließend setzt ihr den Brush bündig oben auf den Button drauf. Nun verpasst ihn noch die Textur tools/toolstrigger und macht ihn zu einem trigger_mutliple . Als Namen tragt ihr button_01_player_trigger ein, da dieser Trigger nur auf den Spieler reagiert wird.

Nun erstellt ihr auf die gleiche Weise einen weiteren trigger_multiple aber mit einen anderen Namen wie button_01_box_trigger. Für diesen Trigger benutzte ich aber die Größenwerte ( so auch in den Standardmaps ) 8x8x2 Units, damit dieser nur aktiviert wird wenn der Cube richtig drauf sitzt. Damit jetzt dies aber auch nur geschieht wenn ein Cube benutzt wird, tragt ihr in den Eigenschaften unter der Option Filtername unseren vorher definierten Filter filter_boxes ein. Als letztes macht ihr noch unter der Kartei Flags nur vor den Eintrag Everything [Not including physics debris] ein Häkchen vor. Wenn ihr bis jetzt alles richtig gemacht habt, sollte es jetzt ungefähr so aussehen:

stefan002.jpg

So sieht es zum Schluss aus!

Input/Output

Der schwere Teil ist nun vollbracht. Was jetzt folgt sind nur die Input/Output-Einstellungen mit den Ihr bisher alle erstellten Entitys und Trigger mit einander verknüpft. Selektiert zu erst den Player-Trigger ( button_01_player_trigger ) und geht unter den Einstellungen auf die Kartei Output . Dort tragt ihr nun mit den Button Add folgende 4 Einträge ein:

[My Output] --> [Target Entity] -–>[Target Input]

OnStartTouch -> button_01_door -> Open
OnStartTouch -> button_01_box_trigger -> Disable
OnEndTouchAll -> button_01_door -> Close
OnEndTouchAll -> button_01_box_trigger -> Enable


Geht nun zu den Output-Einstellungen des Box-Triggers (button_01_box_trigger) und tragt dort auch folgende 4 Einträge ein:

[My Output] --> [Target Entity] -–>[Target Input]

OnStartTouch -> button_01_door -> Open
OnStartTouch -> button_01_player_trigger -> Disable
OnEndTouchAll -> button_01_door -> Close
OnEndTouchAll -> button_01_player_trigger -> Enable

stefan003.jpg

Wundert euch nicht, wenn nach einen Klick auf „Übernehmen“ zum Beispiel beim player_trigger sich die Werte ändern.

Schritt 2: Die Tür

Nun nach dem der Button fast vollendet ist, brauchen wir jetzt eine Tür die entsprechend auf unseren Button reagiert. Zunächst erstellt Ihr ein prop_static mit den World Model door_01_frame_wide_reference.mdl . Dies ist der Türrahmen um den ihr später eure Wände setzt. Nun folgen die 2 Türhälften, die wir aber als prop_dynamic in unsere Map setzen. Die Models dafür sind door_01_lftdoor_reference.mdl und die zugehörige Gegenseite door_01_rtdoor_reference.mdl . Außerdem trägt Ihr noch unter den Eigenschaften bei der Option Parent door_left_door und dem entsprechend für die rechte Tür door_right_door ein. Beide Türen solltet ihr auch noch entsprechend beschriften, in meinen Fall also door_left und door_right.

func_door

Nach dem dies geschafft ist, erstellt ihr wie für Türen gewohnt, zwei Brushes und passt Sie der Größe der 2 Türen an. So sollten sie sich dann auch in der Mitte berühren. Jetzt damit sich auch als Türen von der Engine erkannt werden, macht ihr die 2 Brushes zu func door und belegt Sie mit der Textur tools/toolsnodraw.

Benennt nun den linken func_door -Brush zu door_left_door und tragt bei Move Direction die Werte "0 90 0" ein. Das Gleiche macht ihr mit den rechten Brush nur bloß mit den Namen door_right_door und den Werten "0 270 0". Die Richtung könnt ihr natürlich selbst bestimmen und eurer Map anpassen. Vergesst aber nicht alle Flags bei den func_door -Brushes zu deaktivieren.

stefan004.jpg

Input/Output

Zum Schluss widmen wir uns noch einmal den Input/Output-System um die gerade erstellten Türen mit unseren Button verknüpfen. Öffnet die Output-Einstellungen des button_01_door ( welches wir am Anfang des Tutorials erstellt haben) und tragt dort folgendes ein:

[My Output] --> [Target Entity] -->[Target Input]

-OnOpen -> door_left_door -> Open
-OnOpen -> door_right_door -> Open
-OnOpen -> button_01_down -> PlaySound
-OnClose -> door_left_door -> Close
-OnClose -> door_right_door -> Close
-OnClose -> button_01_up -> PlaySound


Mit einen Klick auf Übernehmen bestätigt ihr die Eingabe und eurer Button ist jetzt bereit für den Einsatz. Ich hoffe ich konnte euch mit diesen Tutorial weiterhelfen und wünsche euch viel Spaß!