*Note: I created the most of the tutorials using the Roboblitz and Gears of War editors. Based on the engine, and the version, some properties specified may be in slightly different locations than what is displayed in the screenshots.

If you need to learn how to create a basic map I would reccomend:
For UT99, UT2K3 & UT2K4: the Unreal Wiki.
For UT3: Waylon's Tutorials.



Einleitung:
Auf den ersten Blick kann so eine leere Kismet Seite echt abschreckend wirken. Aber mit ein wenig Übung wirst du schnell den nötigen Ehrgeiz entwickeln, die leere Seite zu füllen und deine Ideen umzusetzen.
Kismet ist das Instrument, mit dem der User Mover erstellen kann, Script events, Partikeleffekte an und ausstellen, vielleicht sogar die KI kontrollieren und vieles mehr.
Man kann sich Kismet als ein GUI (graphical User interface) vorstellen, welches Zugang zum code bietet, der die Engine steuert. Dabei helfen kleine Kreise und Rechtecke, die dem User die Möglichkeit geben, simple oder komplexere Sequenzen aufzubauen, um das Spiel kräftiger auf den Spieler einwirken zu lassen.

Vorausgesetztes Wissen: Wie man eine simple Testmap erstellt (BSP, Licht, Pfadnetzwerk und Playerstart).

Das Ziel dieses Tutorials ist es, den Leser in die Grundlegenden Komponenten und Navigationen zu führen, am Ende werden wir eine extrem simple Kismet Sequenz erstellen.

Also lasst uns anfangen...


Übersicht:



Das Kismet Hauptfenster: Es ist in 3 Bereiche unterteilt: Das Hauptfenster (Main Window), den Einstellungsbereich (Properties Window) und der Sequenzbereich (Sequences Window). Diese haben folgende Funktionen:

• Main: Hauptfenster: In diesem Bereich werden die Kismet GUI Elemente platziert und miteinander verbunden, um auf sich gegenseitig Funktionen auszuüben.

• Properties: Einstellungsbereich: Jedes erstellte Element in Kismet hat eigene Einstellungen. Du findest sie in diesem Bereich, wo du sie auch ändern kannst.

• Sequences: Sequenzbereich: Abhängig von der Aufteilung und Funktion des Levels kann es in einigen Fällen sinnvoll sein, Kismet in mehrere Sequenzen zu teilen. Dabei hilft der Sequenzbereich dabei, die ganzen Aufteilungen übersichtlich zu halten und es besteht die Möglichkeit, unter den einzelnen Sequenzen ebenfalls Verlinkungen herzustellen und so ganze Sequenzabläufe auszulösen.

*Anm.: Es ist möglich, die Anordnung der Bereiche seinen eigenen Wünschen anzupassen.


Menüleiste:
Die Kismet Menüleiste:

• Open Parent Sequence (Übergeordnete Sequenz öffnen): Funktioniert ähnlich des Zurück-Buttons deines Webbrowsers. Ein Klick führt dich einen Zweig über die aktuell markierte Sequenz.

• Rename Sequence (Sequenz umbenennen): Erlaubt die Umbenennung der momentan ausgewählten Sequenz.

• Zoom To Fit (Zoombereich anpassen): Setzt den Zoombereich automatisch so, dass alle Kismet-Elemente im sichtbaren Bereich liegen.

• Hide Unused Connectors (Unbenutzte Verbindungen ausblenden): Alle Verbindungen, die nicht belegt sind, werden ausgeblendet.

• Show All Connectors (Alle Verbindungen zeigen): Zeigt alle verfügbaren Verbindungen aller Elemente.

• Lines/Curves (Linien/Kurven): Ändert die Linienarten zwischen geraden Linien und Bezier Kurven. Im allgemeinen ist das Geschmackssache.

• Open New Window (Neues Fenster öffnen): Ja.. genau.


Kontextmenü:
Das Kismet Kontextmenü: Um auf das Kontextmenü zuzugreifen, reicht ein Rechtsklick auf eine freie Fläche im leeren Hauptbereich. So werden alle Kismet-Objekte erzeugt.

• New Action: Führt eine Aktion auf einen Actor aus, abhängig davon welche Aktion ausgewählt wurde.

• New Matinee: Erstellt eine neue Matineesequenz und einen Matinee data node.

• New Condition: Wird benutzt, um If-Abfragen "if...then" und eine Ausgabe zu erstellen. Im Grunde nur ein Vergleich zweier Zustände.

• New Variable: Erstellt eine Variable, die von Aktionen, Abfragen oder anderen Kismet Elementen geändert werden kann.

• New Event: Events werden grundsätzlich dazu genutzt, Aktionen (Actions) auszulösen. Stell es dir als Kismet vor, das irgendwelche Vorgänge im Level auffängt und dann etwas ausführt.

• New Comment: Wie beim Coden ist es auch bei Kismet sinnvoll, Kommentare einzusetzen. Entweder für die eigene Übersicht oder für andere, die bestimmte Vorgänge verstehen wollen.

• Create New Sequence: Erstellt eine neue Sequenz. Nach dem Erstellen erscheint sie im Sequenzbereich. Achtung: Keine Leerzeichen in Sequenznamen erlaubt.

• Paste here: Anstatt ein kopiertes Element aus der Zwischenablage irgendwo in die Weltgeschichte einzufügen, kannst du es mit dieser Funkion direkt an dieser Stelle einfügen.


Formen & Farben:

Kismet Objekte erscheinen in einigen speziellen Formen und Farben, an denen folgendes erkennbar ist:

• Rechtecke: Entweder Aktionen (Actions) oder Vergleiche (Comparisons).

• Rauten/Diamantenform: Events .

• Kreise: Normalerweise bei Zahlen oder bei irgendetwas was in der Map vorkommt, Variablen, Referenzen oder beides.

• Rot: Booleans: Logische Wahr/Falsch (True/False) Attribute.

• Schwarz: Externe Variable: Nachdem sie mit einer anderen Variable verbunden sind, nehmen sie die selbe Farbe dieser Variable an.

• Dunkelblau: Floating Point Numbers: Im allgemeinen eine "Computer"-Version von wissenschaftlichen Notationen. (Zahlen mit Nachkommastellen).

• Hellblau: Integer: Ganzzahlige Ziffern.

• Lila: Objekte: Sie referenzieren ein Objekt, wie zum Beispiel einen InterPActor oder Mover innerhalb des Levels.

• Grün: String: Eine alphanummerische Variable, die Text beinhaltet.

• Weiß: Union: Kann mehrere Variablen in eine vereinen.

• Gelb: Vektor: Beinhaltet einen X, Y und Z Achsenwert.

Wenn du die beiden Screenshots einen Moment lang betrachtest wird dir auffallen, dass an manchen Außenrahmen unten kleine lila Dreiecke rauskommen. Das bedeutet, dass Objektvariablen (weil die ja auch lila sind) an diese Verbindungen gehängt werden können.


Verbinden/Trennen & Ein-/Ausschalten von Kismet-Elementen:

Verbinden:

• 1) Klicke mit der linken Maustaste auf den "Out"-Eintrag und halte die Taste gedrückt.

• 2) Beim Ziehen des Mauszeigers erscheint eine Linie, die an den "In"-Eintrag eines anderen Elementes gezoge wird.

*Note: Du kannst Verlinkungen vom "In" oder "Out" Eintrag auch kopieren und an andere Anschlüsse Einfügen. Dafür rechts-klicke einfach auf eine Verlinkung, um an die Optionen zu kommen:

• Klickst du mit der Maustaste auf einen Anschluss und hälst dabei Alt gedrückt, werden alle Verbindungen an diesem Verbindungspunkt gebrochen.

• Rechtsklicke auf einen Eintrag und wähle einen der "Cut" oder "Break"Optionen. Du kannst auswählen, ob du bestimmte Verbindungen oder alle trennen möchtest. Wenn du bestimmte trennen möchtest, gehe auf "Break link to" und es werden alle momentanen Verbindungen dieses Elements angezeigt.

Einschalten:

• Alle Verbindungen sind standardmäßig aktiv. Inaktive Verbindungen werden rot dargestellt. Klicke einfach auf das rote (deaktivierte) Verbindungssymbol und wähle "Toggle-Enable".

Ausschalten:

• Rechtsklicke auf ein Verbindungselement und wähle "Toggle-Disable". Dadurch wird die Verbindung rot und das "Signal" wird nicht über diese Verbindung weitergegeben.



Kismet-Elementen Objekte aus dem Level zuweisen:

Um eine neue Objektreferenz zu erstellen...:

• 1) Wähle ein Objekt im Level aus .

• 2) Rechtsklicke in Kismet und wähle den entsprechenden Eintrag aus dem Kontextmenü aus.



Um einen neuen Actor einem bereits existierenden Kismet-Element zuzuweisen...:

• 1) Wähle den Actor aus, der dem Element zugewiesen werden soll .

• 2) Rechtsklicke auf den Eintrag in Kismet und wähle "Assign to...".



Im Prinzip sind die Einträge in den beiden Screenshots die Selben. Ich habe den Trigger nur beiden zugewiesen


Eine einfache Sequenz:

Unsre einfache Sequenz wird eine Nachricht sein, die angezeigt wird, wenn das Level startet. Ich gehe einfach mal davon aus, dass mein Leser (Du) weiß, wie er eine kleine Testmap mit Licht und Playerstart (und Rebuild!) macht. Das ist nötig, damit man die Nachricht sehen kann. Sollte dies nicht der Fall sein, empfehle ich, erstmal die Tutorialsektion nach Einsteigertutorials zu durchsuchen

• 1) Rechtsklick -> "New Event" -> "Level Startup".


• 2) Rechtsklick -> "New Action" -> Misc -> Log.



• 3) Verbinde die beiden Elemente, indem du eine Linie zwischen "Out" des Level Startup Elements und dem "In" Eintrag des Log-Elements ziehst.



• 4) Ändere die Einstellungen des Log-Elements, indem du einfach daraufklickst. Füge ein Objektkommentar - In diesem Fall "Tutorial!" - hinzu. Um sicherzugehen, dass der Log auch ausgelöst wird, werden wir noch ein Häkchen bei "bOutputObjCommentToScreen" setzen, damit der Kommentar auf dem Bildschirm angezeigt wird.



Und das war's auch schon. Wenn die Map gestartet ist, wird der Spieler spawnen und ein "Tutorial!" wird im Chat-Bereich in der HUD erscheinen.

• Sollten die Objektkommentare nicht auf dem Bildschirm ausgegeben werden, kann es sein, dass dein Spiel so eingestellt ist, dass es diese absichtlich unterdrückt. Es gibt aber einige Möglichkeiten, diese anzuschalten. (Beachte, dass du hierbei Änderungen an den Game-ini-Files durchnehmen musst! Lege immer Sicherheitsbackups an!
1) Finde die DefaultEngine.ini bzw. UTEngine.ini - Datei. Diese ini kann je nach Spiel an unterschiedlichen Orten liegen und unterschiedlich heißen.
Öffne die Datei und suche (STRG + F) nach dem Begriff "Kismet". Einer der ersten Ergebnisse wird "bOnScreenKismetWarnings=FALSE" sein, den du auf TRUE ändern musst, damit die Meldungen angezeigt werden. Speichere die ini Datei und schau ob es funktioniert.
2) Sollte es nicht funktionieren, füge zusätzlich diese Zeile dazu: "bEnableKismetLogging=TRUE".
3) Das sollte zwar funktionieren, ist aber nicht empfohlen, da es auch ein "cooked" File sein könnte, abhängig welches Spiel es ist. Suche ggf. noch mal nach einer game-spezifischen *Engine.ini suchen, wobei der Teil bei * vom jeweiligen Spiel abhängig ist. Solltest du welche finden, führe die oben beschriebenen Änderungen dort auch durch.
4) Sollte das auch nichts bringen, kannst du die Map im Ingame-Browser spielen. Dabei werden alle Log-Nachrichten im Log des GenericBrowser aufgezeichnet, vorher muss aber auch ein Häkchen bei "bIncludeObjectComment" gesetzt werden.
5) Sollte selbst das nichts bringen bleibt nur noch ein Weg: Anstatt eines Logs, nehme einen Emitter und setze ihn dorthin, wo man ihn sehen kann.Versehe ihn mit einem An- und Ausschaltbaren Effekt, der ausgelöst ist, wenn du mitbekommen willst, wann eine Stelle in den Aktionen passiert wurde. Vergiss nicht das "AutoActivate" in den Emittereinstellungen zu deaktivieren.