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