Einleitung
Eigene Fantasiewelten erschaffen, in denen man sich frei bewegen kann. Selbst gebauten Figuren begegnen. Abenteuer selbst erfinden, den Verlauf von Ereignissen und diese selbst bestimmen: Wie wäre das?
Um ein Spiel selbst zu erstellen, muss man vom Programmieren anfangs eigentlich noch gar nichts verstehen. Denn zuallererst braucht man eine Idee und dann einen Plan.
Wovon soll das Spiel handeln? Welche Geschichte soll es erzählen? Personen, Orte und Ereignisse, all das führt zu einem Plan, der umfasst, was zu diesem Spiel gehören soll. Und erst, wenn der Plan »steht«, kann die eigentliche Umsetzung in ein Programmprojekt beginnen. Dann allerdings sollte man schon möglichst gut programmieren können.
Wie du auf eine gute Idee kommst, wie du deine eigene Geschichte »strickst« und wie du einen Plan für ein Spiel aufstellst, wirst du in diesem Buch nicht erfahren. Hier bekommst du einen Kasten voller Werkzeuge, mit dem du deinen Plan in ein Spiel umsetzen kannst.
Wir wollen auch gar nicht so hoch hinaus: Ein professionelles Game wird heutzutage ja von einer ganzen Gruppe von Leuten erstellt, darunter Designer, Künstler, Techniker und nicht zuletzt natürlich Programmierer.
Trotzdem dauert die Arbeitszeit häufig mindestens Monate, wenn nicht Jahre. Die Beteiligten machen einen Vollzeitjob, es ist ihr Beruf. Hier hast du als Einzelgänger nur eine Chance, wenn deine Spiel-Idee so hervorragend und einmalig ist, dass sie andere überschattet.
Bleiben wir also auf dem harten Boden der Tatsachen und planen nicht ein gigantisches Meisterwerk, sondern kümmern uns um solide Grundlagen. Wenn du die beherrschst, hast du durchaus Voraussetzungen, auch einmal an einem professionellen Spielprojekt mitzuwirken.
Welche Werkzeuge benötigen wir?
Um Spiele im 2D- und 3D-Bereich zu erstellen, brauchen wir als Herzstück eine sogenannte Game-Engine. Sie muss mit physikalischen Gesetzen umgehen können, damit die Spielwelt mit ihren Figuren und Ereignissen möglichst echt wirkt. Und sie muss komplexe grafische Effekte beherrschen, damit das Ganze auch optisch etwas hermacht.
Das brauchst du:
Mit Unity (früher Unity3D) haben wir nicht nur eine vollwertige Engine, die so vielfältige Möglichkeiten bietet, dass dieses Buch allein nicht reicht, um alles zu beschreiben. Mit dem visuellen Editor lässt sich ein Spiel bequem erstellen – und das nicht nur für Windows, sondern auch für andere Plattformen, wie z.B. Android oder iOS.
Wir verwenden hier die derzeit aktuelle Unity-Version 2020 (für eventuelle Neuerungen schaust du am besten unter unity.com nach).
Die visuelle Entwicklungsumgebung, die Unity mit sich bringt, bietet schon viele Möglichkeiten, sich Elemente für ein Spiel zusammenzustellen. Damit aber alles wie gewünscht funktioniert und um die volle Leistung der Engine abzurufen, braucht man ein Programmiersystem:
Visual Studio bietet die Möglichkeit, die für Unity nötigen Skripts in einer passenden Programmiersprache, nämlich C#, zu erstellen. Dieses System gibt es kostenlos bei Microsoft (unter visualstudio.microsoft.com). Es kann aber auch über die Unity-Installation automatisch so eingerichtet werden, dass es aus Unity heraus einsetzbar ist.
Damit wir auch eigene Welten und eigene Akteure für unsere Spiele erstellen können, gibt es in Unity weitere leistungsstarke Hilfsmittel, wie z.B. einen Editor u.a. für Landschaften und Bäume. Viele mit anderen Programmen hergestellte Figuren und Elemente lassen sich leicht in Unity importieren und dort einsetzen.
Was bietet dieses Buch?
Richtig los geht es wie bei jedem Buch in Kapitel 1. Bist du ein erfahrener C#-Programmierer, so wird es für dich kein Problem sein, auch dort zu starten. Willst du aber dein C#-Wissen lieber noch mal überprüfen oder festigen, dann kannst du dies in einem vorgeschalteten Kapitel tun, das du zum Download auf der Homepage www.mitp.de/0170 findest.
Ansonsten erfährst du hier u.a.,
wie man in Unity Spiele mit Sprites programmieren kann,
wie man den 1st-Person und den 3rd-Person-Modus einsetzt,
wie man Landschaften gestaltet und einfache Gebäude baut,
wie man klettert, schwimmt und taucht,
wie man einfache Figuren erstellt und sie animiert,
wie man künstliche Intelligenz nutzen kann,
wie man Effekte erzeugt und Sound einsetzt.
Im Anhang gibt es dann noch zusätzliche Informationen, z.B. wie man Unity und Visual Studio installiert und wie man Fehler vermeidet.
Wie arbeite ich mit diesem Buch?
Um dir den Weg vom ersten 2D-Projekt bis zu einem 3D-Game mit Akteuren einfacher zu machen, gibt es einige zusätzliche Symbole, die ich dir hier gern erklären möchte:
Arbeitsschritte
Grundsätzlich lernt man besser, wenn man Objekte selbst einsetzt oder einen Programmtext selbst eintippt oder ändert. Aber nicht immer hat man große Lust dazu. Weil alle Projekte im Buch auch in einem Download-Paket verfügbar sind, findest du hinter einem Programmierschritt auch den Namen des jeweiligen Projekt-Ordners (z.B. Game1). Wenn du also bestimmte Projekte nicht selbst erstellen willst, kannst du stattdessen die dazugehörigen Dateien herunterladen (zu finden unter mitp.de/0170).
Fragen und Aufgaben
Am Ende eines Kapitels gibt es jeweils eine Reihe von Fragen und Aufgaben. Diese Übungen sind nicht immer ganz einfach, aber sie helfen dir, deine Spiele noch besser zu entwickeln. Lösungen zu den Aufgaben findest du auch im Download von der mitp-Seite (dort findest du auch die Programme zu den Aufgaben).
Du kannst sie dir alle im Editor von Windows oder auch in deinem Textverarbeitungsprogramm anschauen. Oder du lässt sie dir ausdrucken und hast sie dann schwarz auf weiß, um sie neben deinen PC zu legen.
Notfälle
Vielleicht hast du irgendetwas falsch gemacht oder etwas vergessen. Oder es wird gerade knifflig. Dann fragst du dich, was du nun tun sollst. Bei diesem Symbol findest du eine Lösungsmöglichkeit. Notfalls kannst du aber auch ganz hinten im Anhang B nachschauen, um ein paar Hinweise zur Pannenhilfe zu finden.
Wichtige Stellen im Buch
Hin und wieder findest du ein solch dickes Ausrufezeichen im Buch. Dann ist das eine Stelle, an der etwas besonders Wichtiges steht.
Wenn du ein solches »Wow« siehst, geht es um ausführlichere Informationen zu einem Thema.
Was brauchst du für dieses Buch?
Du findest das Unity-Paket als komplette Entwicklungsumgebung zu Download und Installation auf der entsprechenden Seite von Unity:
https://unity.com/
Zusätzlich gibt es dort noch eine Sammlung von Hilfsmitteln, die sogenannten Assets. Du findest dort auch eine Menge Zusatzmaterial. Während Unity dich nichts kostet, solange du nicht damit Geld verdienen willst, sind viele Zusätze nicht kostenlos.
Die Beispielprojekte in diesem Buch findest du ebenso wie die Lösungen zu den Aufgaben auf der Homepage des Verlags in der gerade aktuellen Version:
http://www.mitp.de/0170
Die Programmbeispiele sind mit einer Unity-Version erstellt, die vielleicht schon nicht mehr die allerneueste ist, wenn du dieses Buch kaufst oder eine Weile besitzt. Denn Unity wird natürlich ständig weiterentwickelt. Wenn du eines der Projekte in einer neueren Unity-Version öffnest, bekommst du eine solche Meldung:
Mit einem Klick auf Confirm wird das alte Projekt für die aktuelle Unity-Version umgewandelt.
Betriebssystem
Die meisten Computer arbeiten heute mit dem Betriebssystem Windows. Am besten geeignet ist Version 10. Mit Unity lassen sich allerdings nicht nur Spiele für Windows entwickeln, sondern auch für andere Systeme wie Googles Android, Apples iOS, ja sogar Microsofts Xbox und Sonys Playstation.
Speichermedien
Auf jeden Fall benötigst du etwas wie einen USB-Stick oder eine SD-Card, auch wenn du deine Programme auf die Festplatte speichern willst. Auf einem externen Speicher sind deine Arbeiten auf jeden Fall zusätzlich sicher aufgehoben.
Gegebenenfalls bitte deine Eltern oder Lehrer um Hilfe.
Wie gut kennst du C#?
Vielleicht kennst du bereits eine andere Programmiersprache, wie z.B. JavaScript, Python oder auch Basic. Dann sollte dir der Umstieg auf C# nicht schwer fallen. Im Idealfall hast du bereits in C# programmiert und bist mit den Grundlagen vertraut.
Aber auch wenn du keine Ahnung vom Programmieren, aber unbändige Lust auf die Spiele-Programmierung mit Unity hast, kannst du einfach so in Kapitel 1 einsteigen und versuchen, mitzukommen. Programmiert wird erst ab Kapitel 2.
Hinweise für Lehrer
Dieses Buch lässt sich selbstverständlich auch für den Informatik-Unterricht verwenden. Dort setzt natürlich jeder Lehrer seine eigenen Schwerpunkte. Aber wenn es z.B. um eine Programmier-AG oder einen Informatikkurs mit Schwerpunkt Spieleprogrammierung geht, lässt sich dieses Buch in Ergänzung zu Ihrem Lehrmaterial gut einsetzen. Mit Unity steht Ihnen und Ihren Schülern ein mächtiges Entwicklungswerkzeug zur Verfügung.
Was die Programmierung angeht, so wird hier die Sprache C# genutzt, die der Programmiersprache Java recht ähnlich, aus meiner Sicht aber einfacher zu erlernen und einzusetzen ist, weil C# die Vorteile vieler anderer Sprachen vereint und nur wenige Nachteile hat.
Die einzelnen Spielprojekte werden vorwiegend über den visuellen Editor von Unity erstellt, die Programmierung in C# dient der Erstellung von Scripts, um den Spielverlauf zu steuern. Zahlreiche Fragen und Aufgaben mit Lösungen helfen, Gelerntes zu festigen und zu vertiefen.
Übungsmedien
Für den Informatik-Unterricht sollte jeder Schüler ein eigenes externes Speichermedium haben, um darauf seine Versuche zu sichern. So wird verhindert, dass sich auf der Festplatte des Schulcomputers mit der Zeit allerlei »Datenmüll« ansammelt. Außerdem dient der eigene Datenträger dem Datenschutz: Nur der betreffende Schüler kann seine Daten manipulieren.
Regelmäßig sichern
Es kann nicht schaden, die Programmdateien, an denen gerade gearbeitet wird, etwa alle zehn Minuten zu speichern. Denn Computer pflegen gern gerade dann »abzustürzen«, wenn man seine Arbeit längere Zeit nicht gespeichert hat.
Kapitel 1:
Das erste Projekt
Du möchtest natürlich gleich hier an Ort und Stelle dein erstes Spiel erstellen. Daraus wird nichts. Noch nicht. Als Erstes brauchst du Geduld. Und Ausdauer. Hier starten wir aber schon die Maschine, mit der wir später einiges zaubern werden, das sich sehen und spielen lässt. Wir fangen mit einem Projekt an. Und wir spielen auch schon mal ein bisschen mit einem Objekt herum.
In diesem Kapitel lernst du
wie man Unity startet
deine »Werkbank« kennen
wie man Spiel-Objekte in einem Projekt einsetzt
ein bisschen über Spiele-Physik
etwas über 2D und 3D
wie man die Position und Größe von Objekten ändert
wie man Unity beendet
Unity starten
Bevor wir mit dem Basteln anfangen können, muss das Game-Entwicklungssystem Unity installiert werden. Wie das geht, erfährst du in Anhang A. Wenn du dir das Einrichten nicht allein zutraust, solltest du dir von jemandem helfen lassen.
Eine Möglichkeit, Unity zu starten, ist diese:
Hier suchst du unter den vielen Symbolen eines von denen heraus, die wie eine Art schwarzer Würfel aussehen, und zwar das mit dem Namen Unity hub.exe.
Ich empfehle dir, eine Verknüpfung auf dem Desktop anzulegen:
Dazu klickst du mit der rechten Maustaste auf das entsprechende Unity-Symbol (Unity Hub.exe). Im Kontextmenü wählst du Kopieren.
Dann klicke auf eine freie Stelle auf dem Desktop, ebenfalls mit der rechten Maustaste. Im Kontextmenü wählst du Verknüpfung einfügen.
Es ist sinnvoll, für das neue Symbol auf dem Desktop den Text unity
hub.exe
-
Verknüpfung
einfach durch Unity
zu ersetzen.
Von nun an kannst du auf das neue Symbol doppelklicken und damit Unity starten.
Je nach Computer kann es eine Weile dauern, bis Unity geladen ist. Einige Zeit später landest du in einem neuen Fenster.
Startest du Unity zum allerersten Mal seit der Installation, dann musst du es wahrscheinlich noch aktivieren. Wenn du das nicht allein hinkriegst, schau mal in Anhang A nach.
Dort hast du nun die Möglichkeit, ein Projekt zu öffnen (wenn vorhanden). Oder eines neu zu erstellen.
Im neuen Dialogfeld wählst du die Einstellung 2D. Mit 3D beschäftigen wir uns später.
Gib im Feld für Project Name den Namen des neuen Projekts ein. Und dann bei Location den Ordner, wo du dein Projekt unterbringen willst. (Wenn du alles so stehen lässt, schafft sich Unity seinen eigenen Ordner für deine Spiel-Projekte.)
Ich benutze einen Ordner Unity und nenne mein erstes Projekt schlicht und einfach Projekt1.
Und endlich zeigt uns Unity sein wahres Gesicht (was eine ganze Weile dauern kann). Schauen wir uns erst einmal die Aufteilung der vier wichtigsten Fensterbereiche an:
Im Scene-Fenster sieht man erst einmal nur die Kamera. Für ein Spiel brauchen wir dann noch mindestens ein weiteres Objekt wie eine Kugel oder eine Figur.
Dahinter liegt das Game-Fenster: Hier siehst du dein Spiel in Echtzeit ablaufen, wenn du es durch einen der darüberliegenden Buttons gestartet hast.
Im Hierarchy-Fenster ist bis jetzt nur die Main Camera aufgelistet. Dort stehen dann später alle Objekte, die zur Szene eines Spiels gehören (jedes Spiel könnte also mehrere Szenen haben).
Das Project-Fenster erfasst die Ordner mit dem gesamten Zubehör für das ganze Spiel. Dazu gehören natürlich u.a. auch Programmteile. Bilder, die du als Spielobjekt einsetzen willst (wie z.B. eine Kugel oder eine Figur) lassen sich einfach mit der Maus aus einem Ordnerfenster unter Windows hier hineinziehen. Womit die entsprechende Datei ins Projekt kopiert wird.
Dahinter findest du das Console-Fenster, das sich bei Fehlern meldet. Außerdem lassen sich dort Werte, z.B. von Spiel-Objekten, anzeigen.
Um sich die Eigenschaften eines Objekts nicht nur anzuschauen, sondern auch bearbeiten zu können, gibt es das Inspector-Fenster.
Um das Hauptmenü und die darunterliegenden Symbole geht es erst mal nicht, damit bekommen wir später noch genug zu tun.
Ein Objekt zum Spielen
Wir beginnen mit etwas Einfachem. Wir brauchen eine Kugel und die soll sich über das Spielfeld bewegen lassen. Mit der Maus oder mit den Tasten zum Beispiel.
Alternativ zum Hauptmenü lässt sich ein solches Objekt auch direkt im Hierarchy-Fenster erstellen. Dazu öffnest du mit der rechten Maustaste ein Kontextmenü, und über 3D Object ein weiteres. Dort klickst du auf das gewünschte Objekt, wie z.B. Sphere.
Anschließend taucht im Scene-Fenster etwas auf, das wie ein Kreis aussieht. Außerdem zeigt der Inspector zahlreiche Informationen über unser neues Spiel-Objekt.
Dargestellt sind nun zwei Objekte: Die Kamera (auf die wir noch zu sprechen kommen) und darunter oder dahinter die von uns erzeugte Kugel.
Nun ist es an der Zeit, die ganze Szene schon einmal zu speichern.
Bei Unity heißt diese Szene zuerst SampleScene. Passt dir der Name nicht, dann klicke auf Speichern unter und gib im Dialogfeld einen Namen ein, z.B. Kugel1
(wenn dir nichts Besseres einfällt). Die Kennung unity wird automatisch angefügt. Dann klicke auf Speichern.
Wenn du anschließend im Project-Fenster auf Assets klickst, siehst du da den Ordner Scenes, darin befindet sich das Symbol für die Szenen-Dateien.
Und nun schauen wir uns diese Szene einmal genauer an, und zwar in einem anderen Fenster.
Du landest im Game-Fenster. Das hat sich bis jetzt hinter dem Scene-Fenster versteckt.
Hier kannst du sehen, wie dein Spiel in Aktion aussieht. Bis jetzt ist da noch alles dunkel und es bewegt sich nichts. An der Dunkelheit können wir sofort etwas ändern.
Kurz darauf siehst du deine Kugel in einem anderen Licht. Nur im Game-Fenster?
Dort gibt es auch eine Änderung, wie du sehen kannst. Das neue Spiel-Objekt wird als Symbol aus Strahlen dargestellt.
Da haben wir nun eine Kugel, die sich sonnt. Aber sie soll sich bewegen. Doch wie kriegen wir sie dazu? Zuerst einmal sollten wir diesem »Ding« physikalische Eigenschaften geben. Dass das Objekt aussieht wie eine Kugel, heißt noch nicht, dass es sich auch wie eine Kugel aus einem bestimmten Material verhält.
Alternativ dazu kannst du auch den Weg über das Hauptmenü suchen: Dazu klickst du dich über Component und Physics zu Rigidbody durch.
Damit bekommt die Kugel (Sphere) einige physikalische Eigenschaften wie Masse (unsere Kugel wiegt also auf einmal etwas), Gravitation (sie wird vom Boden angezogen, würde also aus der Luft auf den Boden fallen). Auch Kollisionen mit anderen Objekten und ihre Folgen sind möglich. Genauer gehe ich auf Einzelheiten ein, wenn es konkret nötig ist. Jetzt lass alles so, wie es ist.
Wie du bemerkt hast, gibt es in Unity diese Spiel-Hierarchie: Eine Szene umfasst mindestens ein Objekt vom Typ GameObject
. Die Kamera ist ja schon beim Erzeugen eines Projekts vorhanden. Dazu kommt dann so etwas wie eine Spielfigur. In unserem Fall ist das erst mal nur eine Kugel. Die hat dann verschiedene Komponenten, ebenfalls Objekte, nur vom Typ Component
.
Die Komponente Transform
hat jedes Spiel-Objekt »von Geburt an«. Weitere Komponenten lassen sich (fast) beliebig hinzufügen (aber auch wieder entfernen).
Im ersten Moment passiert anscheinend nichts, dann auf einmal fällt die Kugel und verschwindet aus dem Spielfeld.
Start und Stopp eines Spiels lässt sich auch über Buttons steuern. Ganz oben, unter der Menüzeile, findest du drei davon. Der linke (mit dem Dreieck) ist der Play-Button. Per Mausklick kannst du damit ein Spiel starten und stoppen.
Gravitation und Kollision
Irgendwie blöd, dass die Kugel gleich nach dem Start als Spielfigur aus dem sichtbaren Bereich herausfällt. Damit das nicht passiert, könnte man die Gravitation ausschalten. Andererseits kann sie einem beim Spielen nützlich sein. Denk nur mal an ein Jump & Run-Game. Da geht es ja um Figuren, die springen und rennen, aber immer wieder irgendwo landen (und dazu brauchen sie die »Erdanziehungskraft«).
Eine andere und bessere Möglichkeit wäre es, für das Spielfeld eine untere Grenze zu verwenden. Das könnte ein Quader sein. Probieren wir’s aus.
Im Scene-Fenster hat sich nun über den Kreis so etwas wie ein Quadrat gelegt. Auch hier zeigt der Inspector zahlreiche Informationen über das neue Spiel-Objekt.
Solltest du auf die Idee kommen, mal zu sehen, wie das Spiel sich aktuell »macht«, nur zu: Klicke auf den Play-Button oder benutze Strg+P. Die zuerst noch nicht sichtbare Kugel fällt hinter dem Quader herunter. Sie ist also weiterhin da, das neue Objekt beeinflusst ihren Fall (noch) nicht.
Aktuell ist der Quader noch ein Würfel, später könnte man daraus eine Platte machen. Doch erst sehen wir zu, wie wir den Quader nach unten verschieben. Grundsätzlich gibt es da zwei Möglichkeiten:
Du packst das Objekt im Scene-Fenster mit der Maus und ziehst es nach unten (das Ganze geht natürlich auch in andere Richtungen).
Du änderst die Werte für Position im Inspector-Fenster. Genauer: den y-Wert auf -1.
Und nun schau dir im Game-Fenster an, was passiert, wenn du das Spiel startest. (Damit du mehr sehen kannst, habe ich Scale auf 2x eingestellt.)
Du kannst auch mit dem Mauszeiger ins Scene-Fenster fahren und das Rollrad der Maus zum Zoomen benutzen.
Nichts passiert? Ja und nein. Die Kugel versucht wohl zu fallen, wird aber vom Quader aufgehalten. Der verhindert, dass hier die Gravitation sichtbar wird. Denn die Kugel liegt auf dem Quader.
Bei mir steht im Inspector-Fenster hinter Position der y-Wert -4.
Vielleicht hast du ab und zu mal den Eindruck, dass die Position eines Objekts im Scene-Fenster anders ist als im Game-Fenster. Das hängt mit der Kamera zusammen. Die allein bestimmt, was im Game-Fenster zu sehen ist.
Wenn du willst, kannst du die Kamera mal anklicken und damit markieren. Dann lässt sie sich verschieben, ebenso wie Kugel oder Quader. Damit ändert sich auch die Perspektive im Game-Fenster. Über Edit/Undo oder Strg+Z lässt sich die Verschiebung wieder rückgängig machen.
Dass das keine Selbstverständlichkeit ist, wirst du gleich sehen. Verantwortlich dafür, dass die Kugel auf dem Quader landet und nicht weiterfällt, ist eine Eigenschaft, die sie von Anfang an hatte – ebenso wie der Quader.
Schauen wir mal ins Inspector-Fenster. Dort finden wir unter den Eigenschaften (auch Komponenten genannt) jeweils einen Sphere-Collider und einen Box-Collider für Kugel beziehungsweise Quader.
Entferne mal das Häkchen vor einem dieser beiden Einträge.
Dann starte das Spiel erneut, z.B. mit dem Play-Button (oder über Edit und Play).
Und du wirst sehen, dass die Kugel nun einfach durch den Quader hindurchfällt, ein Objekt ist für das andere sozusagen »Luft«.
Was ist ein Collider? Das hat etwas mit Kollision zu tun. Wenn zwei Objekte aufeinandertreffen, dann spricht man von einer Kollision. Das kann eine sanfte oder eine harte Kollision sein. Das Verhalten bei einer solchen »Begegnung« wird in Unity über Collider gesteuert.
Alle betroffenen Objekte müssen also Collider haben. Dabei hat nicht jedes Objekt den gleichen Collider-Typ. Jeder Collider lässt sich aktivieren und deaktivieren. Das ist nützlich, denn manchmal soll keine Kollision stattfinden, dann lassen sich die Collider ausschalten.
Du hast aus Versehen eine falsche Komponente hinzugefügt und willst sie wieder loswerden? Hinter jedem Komponenten-Namen im Inspector-Fenster siehst du ganz rechts drei kleine Pünktchen.
Wenn du darauf klickst, öffnest du ein Kontext-Menü, in dem u.a. der Eintrag Remove Component zu finden ist. Außer bei der Transform-Komponente, die lässt sich nicht entfernen.
2D oder 3D?
Halten wir jetzt erst einmal inne und schauen im Inspector-Fenster genauer hin. Nämlich auf das, was unter Transform so steht. Ich habe das in einer Tabelle zusammengefasst. So sieht das für ein Objekt aus, wenn es gerade erzeugt wurde:
|
X
|
Y
|
Z
|
Mögliche Aktion
|
Position
|
0
|
0
|
0
|
Verschieben
|
Rotation
|
0
|
0
|
0
|
Drehen
|
Scale
|
1
|
1
|
1
|
Größe ändern
|
Es gibt hier drei Möglichkeiten, etwas mit einem Objekt »anzustellen«. Die erste Möglichkeit hast du bereits kennengelernt, als du den Quader nach unten verschoben hast.
Die zweite Möglichkeit, ein Objekt zu drehen, brauchen wir jetzt noch nicht. Bei einer Kugel sieht man davon nichts (es sei denn, das Licht ändert sich mit). Bei einem Quader schon.
Das wirkt sich im Scene-Fenster so aus:
Es gibt da noch eine dritte Möglichkeit, die Veränderung der Maße (Skalierung). Davon wollen wir jetzt Gebrauch machen. Denn der Quader sieht ein bisschen mickrig aus. Warum machen wir aus ihm nicht einen Balken, der den ganzen unteren Spielfeldrand abdeckt?
Damit bildet jetzt der Quader sozusagen den Fußboden, auf den die Kugel fällt.
Ist das jetzt 2D oder 3D? Diese Frage hast du vielleicht schon viel früher gestellt. Genau genommen haben wir es die ganze Zeit mit Objekten zu tun, die dreidimensional sind. Da wir uns erst mal nur im 2D-Bereich (hier auf einer Fläche mit Höhe und Breite) bewegen wollen, haben wir beim Erzeugen des Projekts die 2D-Ansicht eingeschaltet.
Man sieht das im Scene-Fenster an dem kleinen »eingedrückten« 2D-Button:
Hier lässt sich die Anzeige zwischen 2D und 3D umschalten.
Aus der Schule kennst du das klassische Koordinatensystem. Die x-Achse bildet die Horizontale (Waagerechte) und die y-Achse bildet die Vertikale (Senkrechte) ab.
Entlang der x-Achse geht es also nach links oder rechts, entlang der y-Achse nach oben oder unten. In Unity befindet sich so, wie wir es aus der Schule kennen, der Ursprung genau in der Mitte. Der Punkt dort hat die Koordinaten (0 | 0).
Unity begnügt sich nun aber nicht mit zwei Achsen. Sondern da gibt es noch eine dritte, z-Achse genannt. An der entlang geht es nach vorn oder nach hinten.
Schaut man von vorn auf das Koordinatensystem, dann kann man diese Achse nicht sehen. Um alle Achsen dennoch in 2D sichtbar zu machen, greift man zu einem optischen Trick: Die z-Achse wird dann als Diagonale dargestellt.
Schauen wir mal wieder in das Inspector-Fenster, in dem ja unter Transform alle drei Koordinaten aufgeführt sind.
Wenn du dort unter Position und Scale den Wert hinter Z änderst, wirst du nichts davon im Scene-Fenster bemerken (außer bei Z = 0 für Scale). In Wirklichkeit verschiebt sich der Quader nach hinten oder nach vorn oder er dehnt sich in diese Richtungen aus:
|
X
|
Y
|
Z
|
Ergebnis
|
Position
|
0
|
0
|
1
|
Hinter der Kugel
|
Rotation
|
0
|
0
|
0
|
|
Scale
|
10
|
1
|
10
|
So lang wie breit
|
Wenn du Lust zum Experimentieren hast, dann schau der Kugel noch einmal beim Fallen zu, nachdem der »Fußboden« nach vorn oder hinten verschoben wurde. Ergebnis: Die Kugel fällt weiter. Sobald du aber den Quader nach hinten und vorn ausreichend zu einer großen Plattform vergrößerst, bekommt die Kugel wieder »Boden unter den Füßen«.
Wie du ein Objekt mit der Maus verschiebst, weißt du ja im Prinzip. Allerdings ist dazu eine bestimmte Einstellung nötig. Du findest links oben direkt unter dem Hauptmenü eine Reihe von Buttons.
Voreingestellt ist in der Regel der Position-Modus. Wenn du lieber die Größe mit der Maus änderst, dann musst du einfach in den Scale-Modus umschalten. Du kannst ein Objekt auch mit der Maus drehen, wenn du den Rotation-Modus wählst.
Auch wenn wir hier erst einmal im 2D-Bereich bleiben wollen, kann es nicht schaden, auch einen Blick auf die 3D-Ansicht zu werfen.
Und schon hast du die 3D-Ansicht der ganzen Szene. Du siehst die Kugel (die hier nicht in der Mitte liegt). Die Kamera schaut aus einiger Entfernung von weiter hinten zu. Beim Quader, den ich »Fußboden« genannt habe, ist nun zu erkennen, dass er auch eine Ausdehnung in die Tiefe hat.
Willst du das Ganze auch mal im Game-Fenster sehen? Dazu müssen wir die Kamerasicht im Inspector-Fenster umschalten.
Allzu toll sieht es nicht aus, auch weil alles nur weiß auf blauem Hintergrund zu sehen ist.
Unity beenden
Unser erstes kleines Projekt ist damit fertig. Nichts Besonderes, aber auch nicht übel für den Anfang. Aber wir sollten den Spiel-Objekten doch noch einen anderen Namen geben. Dazu muss das jeweilige Objekt im Hierarchy-Fenster markiert sein.
Nun kannst du durch direktes Neueintippen den alten Namen überschreiben.
Bei mir heißt die Kugel nun »Kugel« und der Quader bekommt den Namen »Boden«.
Jetzt wird es Zeit, Unity erst mal wieder zu verlassen.
Solltest du an deiner Szene noch etwas verändert haben, wird in einem Meldefenster noch einmal nachgefragt:
Zusammenfassung
Damit wäre erst einmal eine Verschnaufpause fällig. Nun hast du Unity schon etwas näher kennengelernt, sodass du sicher gern in den nächsten Kapiteln weiter damit arbeiten beziehungsweise spielen möchtest.
Auf jeden Fall weißt du schon einmal, wie man ein Projekt erstellt und dass dies aus mindestens einer Szene und einem Spiel-Objekt besteht. Und du kennst ein paar Operationen im Umgang mit Unity:
Unity starten
|
Doppelklicke auf das Symbol für Unity. Oder klicke auf Start/Ausführen und tippe den kompletten Pfad für unity-hub ein.
|
Neues Objekt erzeugen
|
Klicke auf GameObject/3D Object und das Objekt deiner Wahl.
|
Physik-Komponente hinzufügen
|
Klicke auf Component/Physics/Rigidbody.
|
Objekt umbenennen
|
Klicke mit der rechten Maustaste auf das Objekt und dann klicke auf Rename.
|
Spiel starten
|
Klicke auf Edit/Play.
|
Szene speichern
|
Klicke auf File/Save.
|
Hilfesystem aufrufen
|
Klicke auf Help.
|
Unity beenden
|
Klicke auf File/Exit.
|
Auch über die Elemente eines Spiel-Projekts weißt du schon ein bisschen Bescheid.
GameObject
|
Spiel-Objekt, wie z.B. Quader oder Kugel, aber auch Kamera oder Licht
|
Collider
|
Komponente für Kollisionen
|
RigidBody
|
Komponente für physikalische Eigenschaften, wie z.B. Masse oder Gravitation
|
Für jedes Objekt gibt es eine Transformations-Komponente mit diesen Optionen:
Transform
|
Komponente für Änderungen der Lage und Größe
|
Position
|
Verschieben in alle Richtungen (3D)
|
Rotation
|
Drehen in alle Richtungen (3D)
|
Scale
|
Vergrößern/Verkleinern in alle Richtungen (3D)
|
Ein paar Fragen ...
Was passiert, wenn der Quader auch eine Rigidbody-Eigenschaft hätte?
Was passiert, wenn die Kugel (mit Rigidbody-Eigenschaft) auf eine Schräge fällt?
... und eine Aufgabe
Ändere dein Projekt so um: Drehe den »Boden« (beziehungsweise Quader) um die z-Achse. Wähle 15 bis 30 Grad (plus oder minus). Verschiebe die Kugel in die obere linke oder rechte Ecke. Ergänze das Ganze um einen weiteren Quader, der rechts oder links eine Mauer bildet. Beachte die Kameraperspektive. Dann starte das Spiel und schau zu.
Kapitel 2:
Script-Programmierung
Nun haben wir eine Kugel. Sie kann ganz ohne unser Zutun fallen oder rollen – wenn es bergab geht. Das bewirken ihre physikalischen Eigenschaften. Aber steuern lässt sie sich nicht. Wir brauchen einen Weg, um die Kugel zu kontrollieren. Und den suchen und finden wir hier.
In diesem Kapitel lernst du
was Assets sind
wie man ein Script erstellt und bearbeitet
etwas über Klassen und Methoden
die if
-Kontrollstruktur kennen
wie man ein Objekt über Tasten steuern kann
etwas über Vektoren
die Methoden AddForce()
und MovePosition()
kennen
etwas über Import und Export von Assets
Ein Script erstellen
In Unity gibt man einer Spielfigur eine Art Drehbuch, Script genannt. Darin steht, was sie zu tun hat. Unsere Spielfigur ist hier die Kugel.
Für unser erstes Drehbuch benutzen wir in jedem Projekt einen eigenen Assets-Ordner. Doch was sind eigentlich Assets? Darunter versteht man die Zutaten zu einem Spiel. Also alles, was dazugehört.
Auf jeden Fall sind das Spiel-Objekte, die in unserem Fall in der Szene-Datei untergebracht sind. Und natürlich auch Scripts. Damit alles schön aufgeräumt ist, kann man unter dem Hauptordner für Assets Unterordner anlegen, in die man seine Zutaten hineinpackt.
Einen Unterordner gibt es schon, und der heißt Scenes.
Darin liegen die Dateien für die aktuelle Spiel-Szene, im Moment ist das SampleScene.unity oder Kugel1.unity.
Ganz unten im Project-Fenster taucht nun ein Ordner-Symbol auf. Dort kannst du den Namen ändern.
Als Nächstes erzeugen wir die Script-Datei.
Das Kontextmenü, das sich öffnet, kennst du schon.
Und schon hat das Project-Fenster ein neues Symbol.
Auch ein Script ist eine Komponente, wie du unschwer erkennen kannst, wenn du das Spiel-Objekt Kugel markierst und ins Inspector-Fenster schaust. Man nennt das Script auch Behaviour-Komponente, denn darin wird das Verhalten eines Spiel-Objekts beschrieben.
Ein Script braucht seine eigene Sprache. Das heißt: Wir können nicht einfach auf Deutsch hineinschreiben: »Liebe Kugel, springe doch bitte auf Tastendruck oder Mausklick wieder zurück nach oben«, sondern die Anweisungen müssen ganz präzise in einer bestimmten Programmiersprache verfasst sein. Das ist hier C# (gesprochen C-sharp). Und deren Wortschatz besteht aus englischen Wörtern.
Nun müssen wir uns um das kümmern, was ins Drehbuch hinein soll. Wenn du das Script-Symbol anklickst, siehst du im Inspector-Fenster, dass da offenbar schon etwas steht.
Um diesen Text zu bearbeiten, brauchen wir einen Editor. Unity nutzt dazu Visual Studio von Microsoft. Eine Version davon wurde bei der Einrichtung von Unity mitinstalliert.
Normalerweise. Sollte das nicht der Fall sein – was du ja demnächst merken wirst – findest du genauere Informationen zur Installation in Anhang A.
Beim ersten Start von Visual Studio wird dieses konfiguriert. Darüber informiert dich eine entsprechende Meldung.
Das Fenster, in dem du landest, wird auch Editorfenster genannt. Hier kommen u.a. die Anweisungen für Spielobjekte hin.
Es kann sein, dass das Aussehen des Fensters von Visual Studio nicht genauso aussieht wie da oben, aber z.B. so oder ähnlich:
Das hängt davon ab, welche Version im Einsatz ist. Visual Studio und Unity kommen von zwei verschiedenen Firmen und so haben ihre Produkte auch voneinander unabhängige Entwicklungsphasen. Doch im Prinzip funktionieren alle Versionen von Visual Studio gleich.
Die Datei, mit der wir es hier zu tun haben, heißt ausführlich SphereControl.cs. Die Kennung am Ende kürzt »C-Sharp« ab. Es handelt sich dabei um nichts weiter als eine Textdatei. Und das steht schon drin (→ Projekt3):
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SphereControl : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
So etwas nennt man Quelltext. Hier wird wie in einem Drehbuch näher beschrieben, wie sich ein Objekt verhalten soll.
Wenn du noch nie programmiert hast, dann kannst du vielleicht anfangs damit gar nichts anfangen. Doch wenn du weiter mitmachst, wirst du mit der Zeit mehr und mehr verstehen.
Die ersten drei Zeilen beginnen mit using
. Die dahinterstehenden Namen bezeichnen sogenannte Bibliotheken, die den Wortschatz der Sprache C# erweitern:
In UnityEngine
befinden sich die Klassen und Methoden zur direkten Programmierung u.a. der Spiel-Objekte. Darüber lässt sich z.B. die Position unserer Kugel oder ihre Größe während des Spielverlaufs verändern. Und System.Collections
enthält wichtige Strukturen, die die allgemeinen Fähigkeiten von C# erweitern.
C# hat zunächst einen nur kleinen, aber kompakten Grundwortschatz. Alles andere ist in Bibliotheken ausgelagert, die sich über using
in ein Projekt einbinden lassen. Der Vorteil ist, dass jeder sich eigene Bibliotheken erstellen kann, die zum jeweiligen Entwicklungssystem passen. Für Unity gibt es eine Menge Nützlichkeiten, mit denen C# erweitert wurde.