Tools for the Fools
Unity 2D
Als wir unser Projekt starteten mussten wir Programmierer
einige Entscheidungen treffen. Welche Engine wir benutzen würden stand schon
fest: Unity 3D. Jetzt fragt ihr euch sicher, warum wir eine 3D-Engine für ein
2D Spiel nehmen.
Unity ist eine Engine, die sehr leicht modifizierbar ist,
deshalb ist es Indie-Entwicklern möglich diese auf ihre persönlichen
Bedürfnisse anzupassen. So kann man unter anderem eigene Inspektoren, sowie
ganze Editorfenster schreiben, die es einem ermöglichen die Wertezuweisungen
selbst für die "härtesten Programmier-Noobs" zugänglich zu machen.
|
Abbildung 1: Custom Inspector |
In Abbildung 1
sieht man unseren selbstgeschriebenen Inspektor, dessen Funktionalität auf
Position und Skalierung eingeschränkt wurde, da die Rotation für 2D irrelevant
ist, da die Charactere bereits in der richtigen Rotation gezeichnet worden
sind.
Wir haben uns dafür entschieden, dass die Charaktere die x
und y Werte benutzen, da diese bei einem 2D-Vektor benutzt werden. In Abbildung 1 sieht man also, dass der Z Wert, sozusagen die Tiefe (Ein
Charakter steht vor einem Anderen),
durch eine Enumeration ersetzt wurde. Diese Enumeration kann den Wert Layer1 – Layer6 oder Background
annehmen, wobei nur der Boden auf dem Hintergrund sein sollte.
Tools?
Tools können in Unity einfach erstellt werden indem man
eine EditorWindow Klasse erstellt,
diese einem Menü-Item zuweist und eben jene dann mit ganz normalen GUI-Elementen füllt.
Der Vorteil von EditorKlassen ist, dass man noch die EditorGUI-Klassen benutzen kann und
andere Dinge, wie PrefabUtilities
u.ä.
|
Abbildung 2: Tool und Inspektor im Vergleich
|
Für die, die die Unity Oberfläche noch nie gesehen haben,
mögen die beiden Fenster in Abbildung 2
jetzt beide unübersichtlich aussehen, doch wenn man genauer hinschaut, sieht
man sehr viele nützliche Funktionen.
Doch in Wahrheit ist das Tool viel komfortabler,
übersichtlicher und durch die Erweiterbarkeit auch sehr viel nützlicher als der
Unity-eigene Inspektor, der einfach alle Variablen darstellt, die public sind.
Zu den Erweiterungen und der Funktionalität der Tools kommen
wir später bei Unsere Tools.
Diese Tools sind zwar leicht zu erstellen und zu benutzen,
bedürfen jedoch einiger Wartung und auf jeden Fall eine nicht unbeträchtliche
Programmierdauer, deshalb sollte man sich als Team, abhängig von der Zeit der
Entwicklungszeit für das gesamte Spiel, entscheiden, ob solche Tools überhaupt
sinnvoll sind.
Der Grund besteht ganz einfach darin, dass man die Tools
immer sehr genau auf sein Projekt zuschneidet, da sie modular programmiert noch
sehr viel zeitaufwändiger wären.
Wenn man jedoch ein Tool modular programmiert, könnte man es
für weitere Projekte einsetzen und/oder im Assetstore zum Verkauf anbieten.
Jedoch sollte man sich überlegen, ob es den Aufwand wirklich wert ist, denn
Zeit ist ja bekanntlich Geld :D
Um zu erkennen, ob die Leveldesigner oder andere Leute die
mit der Engine arbeiten ein Tool/AddOn benötigen erkennt man oft daran:
- Sie beschweren sich über unnötige eintönige
Aufgaben
- Eine Funktionalität die das Spiel oft benötigt
ist von Unity nicht oder nur mangelhaft gegeben
- Ein Arbeitsablauf wird oft gebraucht
Bedacht werden sollte hierbei:
- Die Programmierzeit sollte ein Bruchteil der
durch das Tool eingesparten Arbeitszeit sein
- Das Tool muss übersichtlich sein und leicht zu
benutzen
o
Sonst geht Zeit für Erklärungen und das Lesen
von Handbüchern verloren, was wiederum für die Tonne ist
- Man sollte sich mit GUI und Tools auskennen,
sonst geht unnötig viel Zeit verloren
Unsere Tools
Character Editor
Der Character Editor
war das erste Tool für unser Projekt, da die Leveldesigner schnellstmöglich
eine Grundlage zum Arbeiten brauchten.
Mithilfe dieses Tools kann
man blitzschnell Charaktere erzeugen
und diesen Dialoge und Overhead-Texte zuweisen.
|
Abbildung 3: Character Sheet |
In Abbildung 3 ist
das Character Sheet zu sehen. Oben im
Bild ist eine Fläche, die den Namen des angewählten Charakters anzeigt.
Wenn kein Charakter angewählt ist, erscheint ein Knopf
mithilfe dessen man einen neuen Charakter anlegen kann.
Wenn ein Charakter angewählt ist, kann man weiter unten
dessen Werte anschauen. Diese Vorgehensweise wird in den anderen Tools
ebenfalls benutzt.
Hier sieht man nur die Werte Name, ID und Talk Type,
wobei letzteres vielleicht ein wenig mehr Erklärung bedarf. Das System, was die
Dialoge und Overhead-Texte verwaltet, wird benutzt, sobald der Spieler in
Interaktion mit einem anderen Charakter tritt. Wenn besagter Talk Type auf Dialog gestellt ist,
beginnt eine Dialog-Unterhaltung, bei Overhead eine Overhead-Text-Unterhaltung.
Und nun zu den Dialogen und Overheads.
|
Abbildung 4: Dialog Sheet |
In Abbildung 4 sieht
man das Dialog-Sheet, in dem alle
Dialoge des Spiels erstellt und bearbeitet werden können.
Jeder Dialog hat folgende Werte:
Für den Editor:
Für das Spiel:
- ID
- Text
- Wahrheitswert (Ist nach dem Dialog die
Unterhaltung vorbei?)
- Nächster Charakter
- Nächster Dialog
Bei manchen Dialogen wird diese Grundfunktionalität um
andere Werte erweitert.
So können die Dialoge in 3 verschiedene Dialogarten
unterteilt werden:
- Non Selectable
- Selectable
- Overhead
Non Selectable sind
Dialoge, bei denen nur einfacher Text angezeigt wird und die vom Spieler mit
einem Betätigen der Enter-Taste oder einem Mausklick weitergeschaltet werden
können. Diese werden zum Beispiel benutzt um Story-Texte oder Fragen
anzuzeigen.
Bei Selectable
Dialogen kommen die Buttons ins
Spiel. Diese lassen den Leveldesigner eine beliebige Anzahl an Buttons
einfügen, welcher einen Anzeigetext haben kann und auf einen anderen nächsten
Dialog verweist (Siehe Abbildung 5).
|
Abbildung 5: Ein Selectable mit Buttons |
Die letzte Kategorie Overheads
unterscheidet sich gravierend von den anderen 2 Dialogarten.
Die Overhead-Texte werden in Sprechblasen über den Köpfen
der sprechenden Charaktere angezeigt und haben eine festgelegte Anzeigezeit, die der Spieler nicht
beeinflussen kann, die von den Level-Designern im Tool festgelegt wird.
|
Abbildung 6: Erweiterung um die angezeigte Zeit (in
Sekunden) |
Außerdem können unendliche viele Overhead-Unterhaltungen
gleichzeitig geführt werden, ohne dass der Spieler involviert sein muss.
Fertige Dialog- und Overhead-Texte im Spiel:
|
Abbildung 7: Ein Overhead(links) und ein Selectable (rechts) |
Event Manager
Der Eventmanager ist dafür da, an bestimmten Stellen Events
auszulösen.
Events können an Dialoge oder an TriggerAreas
(Auslöser-Gebiete) angehängt werden und werden ausgeführt, sobald der Spieler
den Dialog gelesen hat, oder das Gebiet betritt.
|
Abbildung 8: Customization Sheet |
Als erstes wird ein Dialog oder eine TriggerArea zur
Bearbeitung ausgewählt. Hierbei kann der Level-Designer den Listen Filter auf
eine Art einstellen um die Auswahl-Anzeige einzuschränken (In diesem Beispiel
ist der Filter auf All).
Wenn ein Dialog mit Buttons ausgewählt wird, muss er erst
einen Button auswählen bevor er die Events hierfür bearbeiten kann (Jeder
Button hat individuelle Events).
Sobald dies getan ist kann man im Event Sheet die Events des ausgewählten Elements bearbeiten.
|
Abbildung 9: Event Sheet |
Nachdem man ein ausgewählt oder ein neues Event erstellt
hat, kann man dieses wie in Abbildung 9
zu sehen bearbeiten.
Als erstes wird ein Event
Type ausgewählt, der bestimmt, welche Aktion ausgelöst wird (in diesem Fall
Check Quest Status). Außerdem kann
man noch sagen, ob das Event öfter ausgelöst werden kann (Can only be called once?) und wie lange die Abklingzeit für dieses
Event ist (Event Cooldown).
Sobald man eine Aktion ausgewählt hat kann man deren Werte
bearbeiten.
In diesem Fall kann man angeben welcher Quest auf seine
Erfülltheit getestet wird (Quest ID)
und von welchem Charakter (Char ID)
welcher Dialog aufgerufen werden soll, wenn der Quest erfüllt ist oder eben
nicht (Dialog ID (True) und Dialog ID (False)).
Asset Creator
Unser letztes Tool ist der Asset Creator, der dazu da ist, dass sich unsere Level-Designer aus
der riesigen Masse an Assets, die für unser Spiel gezeichnet wurden, ein Asset
anschauen und dieses mit einem einfachen Maus-Klick platzieren können.
|
Abbildung 10: Der Asset Creator |
Der Asset Creator bieten noch einiges mehr an
Funktionalität, wie in Abbildung 10
zu sehen ist.
Man kann durch einen einfachen Maus-Klick alle Assets in
seine eigene Bibliothek laden, die von einem der Programmierer oder Level-Designern
erstellt wurden.
Oben im Bild sieht man, dass auch hier eine Filter-Option
vorhanden ist, die die angezeigten Assets auf eine bestimmte Kategorie
einschränkt (z.B. Nature, Character,
Other, …).
Zudem kann man in einem Feld nach einem bestimmten Asset per
Name suchen, was dann automatisch angewählt wird.
In der Preview unten im Bild sieht man die Textur von der
das Haus genommen wurde und kann außerdem erkennen, welches Haus angewählt
wurde (hervorgehoben durch eine weiße Box).
Die Preview kann durch einen Klick auf den Maximize Knopf vergrößert werden.
|
Abbildung 11: Die maximierte Ansicht der
Preview | | |
Jedes Asset wird nach der
Auswahl durch den Create Asset Knopf
in der Mitte des aktuellen Szenen-Abschnitts erstellt, sodass man nicht lange
suchen muss, wie in Abbildung 12 zu
sehen ist.
|
Abbildung 12: Ein erstelltes Haus |
Fazit
Nun seid ihr am Ende dieses ellenlangen Technik-Beitrags
angelangt und ich möchte noch ein kleines Fazit zu Tools in Unity abgeben.
Tools für Unity können unglaublich mächtig sein, wenn sie
richtig geschrieben werden. Doch wir als Team haben bereits unzählige
Fehlfunktionen der Engine festgestellt, die den Programmierern unendlich oft
Kopfzerbrechen bereiten. So sollte man wenn man diese Tools programmiert immer
darauf achten, dass man jemanden zur Hand hat, der das Tool laufend testet und einem Feedback gibt,
da man selbst nie alle Fehler finden kann, die ein solches Werkzeug produziert.
Mit laufendem Feedback ist es jedoch durch die so leicht
zugänglichen Editor-Klassen von Unity sehr gut möglich ein super effizientes Tool
zu schreiben, was dem Team und vor allem den Level-Designern Tage an Arbeit
sparen kann, was natürlich am meisten den Producer freut ;)
In diesem Sinne, ran an die Tools, oder wie mein
Co-Programmierer immer zu sagen pflegt: „Tool it you Fool!“.
P.S.: Bei Rückfragen schreibt einfach an unsere Team-Adresse:
Redletter.Games@Gmail.com