*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.



Prologue - Debugging Kismet



Ich habe eine simple Testmap bestehend aus etwas BSP, einem Skylight, einem Playerstart, einem Skydome und einem DirectionalLight erstellt.

Ich benutze nur standardmäßig vorhandenen Inhalt, der in den Packages EditorMeshes und EditorMaterials gefunden werden kann.

Es gibt zwei grundsätzliche Methoden, um erfolgreich in Kismet debuggen zu können, die in Kombination eine optimale Hilfestellung darstellen.

Kommentare:

Jedes einzelne Kismetelement kann mit einem Kommentar versehen werden und diese Kommentare können beliebig auf dem Bildschirm links unten ausgegeben werden. Einfach einen Kommentar einem Objekt hinzufügen. Wenn dieses angesprochen wird und ein Häkchen bei "bOutputObjCommentToScreen" gesetzt ist, wird der Kommentar auf dem Bildschirm ausgegeben. Dies ermöglicht das Nachverfolgen des Signals um feststellen zu können, wo es hängen bleibt.





• 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.

Logs:

Du kannst nahezu alles an einen Log anhängen. Du kannst ein Signal zu einem Log ausgeben lassen, dem Log einen Kommentar geben, der beschreibt was du zu testen versuchst, ein Häkchen bei "bOutputObjCommentToScreen" setzen und eine Nachricht auf dem Bildschirm empfangen, wenn der Log ausgelöst wurde. Du kannst außerdem auch Variablen an den Log anhängen, die du nachverfolgen kannst. Zum Beispiel wenn ein Counter nicht richtig zu zählen scheint. In den unteren Beispielen ist der MaxTriggerCount auf 0 gesetzt.

Signalweitergaben debuggen: Ich habe einen Trigger erstellt und ein Logevent, um zu sehen, ob der Trigger auch wirklich ein Signal abgibt. Das könnte man genausogut erreichen, indem man dem Trigger ein Kommentar gibt und es auf dem Bildschirm ausgeben lässt. Ich habe "bOutputToScreen" im Log-Element deaktiviert, dafür aber "bOutputObjCommentToScreen" aktiviert. Wenn der Trigger ausgelöst wird, wird der Kommentar des Logelements auf dem Bildschirm ausgegeben.




Variablen debuggen: Ich werde nun ein Logevent erstellen, welches den Wert einer Integer Variable liest und diese auf dem Bildschirm ausgibt. Zuerst muss man dazu den Int Node des Logelements einblenden. Das geschieht mit einem Rechtsklick und anschließendem Auswählen von Expose Variable -> Int - Int *.




Im nächsten Schritt wird es in das Kismet System eingegliedert. Im unteren Screenshot habe ich einen int counter erstellt. Ich werde die Variable an A überwachen und das Logevent wird mir mitteilen welchen Wert die Variable an A hat, sobald A gleich B ist.
Ich habe das "bOutputObjCommentToScreen" deaktiviert, weil ich den Kommentar nicht brauchen werde, dafür habe ich aber "bOutputToScreen" ausgewählt, damit die Variable auf dem Schirm ausgegeben wird..