Unity durchsuchen

C#-Coding in Unity für Anfänger

Sie möchten also das Programmieren in Unity lernen, um mit Ihrem ersten Spiel loszulegen, wissen aber nicht, wo Sie anfangen sollen. Das verstehen wir gut. Hier finden Sie eine kurze Darstellung der Scripting-Elemente in Unity und einige Lernmaterialien, mit denen Sie unsere fortgeschritteneren Projekte wie "Space Shooter" durchgehen können. Danach sollten Sie die wichtigsten Grundlagen des Codings wie Variablen, Funktionen und Klassen durchschauen und wissen, wie man sie benutzt.

Lesen Sie hier weiter, wenn Sie ein erfahrener Programmierer sind, aber Unity neu für Sie ist.

Was ist Scripting in Unity?

Scripting sagt Ihren GameObjects, wie sie sich verhalten sollen. Die Scripts und Komponenten, die mit den GameObjects verbunden sind und ihre Interaktion ergeben das Gameplay. Scripting in Unity unterscheidet sich von der reinen Programmierung. Wenn Sie schon einmal programmiert haben, z. B. eine App, ist Ihnen bestimmt aufgefallen, dass Sie in Unity nicht den Code erstellen müssen, der diese Anwendung ausführt, da Unity das für Sie übernimmt. Stattdessen können Sie sich in Ihren Scripts auf das Gameplay konzentrieren.

Unity läuft in einer großen Schleife ab und liest sämtliche Daten einer Game-Szene aus. Alle Informationen zu Beleuchtung, Meshes und Verhalten werden erfasst und für Sie verarbeitet.

Denken Sie einmal ans Fernsehen, das in Nordamerika beispielsweise mit 29,5 Frames pro Sekunde läuft. Unity muss das Gleiche tun: Die einzelnen Frames laufen nacheinander ab. Sie leiten Unity mit den Anweisungen, die Sie in Ihre Scripts geschrieben haben, und Unity führt diese Anweisungen Frame für Frame so schnell wie möglich aus.

Eine hohe Framerate zu erreichen bedeutet nicht nur, dass Ihr Spiel flüssiger wirkt, sondern auch, dass Ihre Scripts häufiger ausgeführt werden, was die Steuerung reaktionsfähiger macht.

Welche Sprachen kann man in Unity verwenden?

Ein Script muss mit einem GameObject in der Szene verbunden sein, um von Unity aufgerufen zu werden. Scripts werden in einer besonderen Sprache geschrieben, die Unity verstehen kann. In dieser Sprache kommunizieren wir mit der Engine und geben ihr unsere Anweisungen.

Die Sprache, die in Unity benutzt wird, heißt C# (gesprochen C-Sharp). Alle Sprachen, mit denen Unity arbeitet, sind objektorientierte Scripting-Sprachen. Wie in jeder Sprache gibt es für Scripting-Sprachen Regeln zum Satzbau und Wortarten. Die wichtigsten "Wortarten" sind Variablen, Funktionen und Klassen.

Wenn Sie eine Unity-Version bis 2017.3 benutzen, steht Ihnen der Text-Editor MonoDevelop zur Verfügung. Dieser hilft uns, unseren Code zu vervollständigen, sagt uns, wenn wir falschen Code schreiben und ermöglicht uns, Shortcuts zu nutzen. Ab Version 2018.1 können Sie auch Visual Studio for Unity Community oder andere Text-Editoren wie Visual Studio, Notepad oder Sublime Text verwenden.

Hier sehen Sie ein Script mit Beispielen zum Coding (basierend auf dem "Coding in Unity für absolute Anfänger"-Tutorial):

sample code unity

Wie Sie sehen, gibt es Variablen, Funktionen und Klassen.

Und was ist das?

Variablen enthalten Werte und Referenzen zu Objekten (Sie können Objekte als "größere" Variablen ansehen). Sie sind wie eine Kiste, die etwas enthält, das wir benutzen können. Variablen beginnen immer mit einem Kleinbuchstaben.

Funktionen sind Code-Sammlungen, die diese Variablen vergleichen und manipulieren. Funktionen beginnen mit einem Großbuchstaben. Wir ordnen Code in Funktionen an, damit wir ihn in verschiedenen Teilen des Programms mehrfach einsetzen können.

Klassen sind eine Möglichkeit, Code so zu strukturieren, dass Sammlungen von Variablen und Funktionen zu einer Vorlage zusammengefasst werden, die die Eigenschaften eines Objekts definiert.

Scripting bedeutet in erster Linie, diese Objekte und ihre aktuellen Zustände und Werte zu vergleichen. Es basiert auf Logik, die ein Ergebnis oder eine Auswirkung bestimmt.

Variablen

In Unity beginnen Scripts mit dem Anlegen der Tools, die Sie benötigen, üblicherweise durch die Festlegung von Variablen. Sie können die festgelegten Variablen hier sehen, beginnend mit dem Sichtbarkeits-Schlüsselwort "public" oder "private", gefolgt von einem Typ und einem Namen.

variables in unity

Wenn wir Variablen festlegen, gibt es verschiedene Arten der Sichtbarkeit, die festgelegt werden können, aber die beiden wichtigsten sind "public" (öffentlich) und "private" (privat).

Wenn Sie ein Script mit dem oben angegebenen Text im Code-Editor erstellen und dann in Unity dieses Script einem GameObject zuweisen, werden Sie sehen, dass Sie auf die Light-Variable, die als "public" festgelegt ist, zugreifen und diese sehen können, die private jedoch nicht. Das liegt daran, dass auf als "private" definierte Variablen nur innerhalb dieses speziellen Scripts innerhalb dieser speziellen Klasse zugegriffen werden kann.

Wenn Sie diese Variable als "public" festlegen, können andere Scripts und Klassen darauf zugreifen und sie kann über den Inspector im Unity-Editor geändert werden. Das bedeutet, dass andere Personen darauf zugreifen und Werte verändern können.

Es gibt viele Gründe die Verwendung von "private" oder "public" abzuwägen. Private-Variablen halten Ihren Code sauberer, da Sie wissen, dass der Wert dieser Variablen nur innerhalb der Klasse verändert werden kann. Dies macht das Debuggen und Verwalten des Codes einfacher.

Wenn Sie "public" auswählen und ein Problem auftritt, müssen Sie in Ihrer gesamten Codebase nach der Ursache des Problems suchen, da jedes andere Objekt Zugriff auf diese Variable hat. Wenn Sie allerdings möchten, dass Objekte miteinander kommunizieren, brauchen Sie einige Variblen (oder Funktionen), die öffentlich sind.

Ein weiterer wichtiger Aspekt von Variablen ist ihre Art, ihr "Type". Type definiert, welche Art von Werten in einer Variable bereitgehalten wird, z. B. eine Zahl, Text oder komplexere Types wie die im Bild unten: Transform, Light und Demo Script sind eigentlich Referenzen zu Komponenten. Unity muss wissen, um welche Art von Objekt (Type) es sich handelt, um damit umgehen zu können.

variables in unity inspector

Wichtig ist auch der Name der Variablen. Zur Benennung von Variablen müssen Sie hauptsächlich wissen, dass diese nicht mit einer Zahl beginnen und keine Leerzeichen enthalten dürfen. Deshalb hat sich ein bestimmter Stil bei der Benennung durchgesetzt. In C# ist "camelCase" ("Höckerschrift") die Benennungsrichtlinie: Man beginnt mit einem Wort in Kleinbuchstaben und fügt ohne Leerzeichen weitere Wörter hinzu, die mit einem Großbuchstaben beginnen, z. B. "myLight".

Wenn Unity das Script kompiliert, werden öffentliche Variablen im Editor sichtbar, wie Sie unten in der Inpector-Abbilldung sehen können.

demo script unity inspector

Funktionen

Scripts manipulieren die Variablen, indem Sie Funktionen verwenden. Es gibt verschiedene Funktionen, die in Unity automatisch ablaufen. Zum Beispiel:

functions in unity

Awake wird nur einmal aufgerufen, wenn das GameObject mit dieser Komponente instanziiert wird. Wenn ein GameObject inaktiv ist, wird es nicht aufgerufen, bis es aktiviert wird. "Awake" wird sogar aufgerufen, wenn das GameObject aktiv, die Komponente aber nicht aktiviert ist (über das kleine Kontrollkästchen neben dem Namen). Sie können "Awake" nutzen, um alle Variablen zu instanziieren, denen Sie einen Wert zuweisen möchten.

Start – wie Awake wird Start aufgerufen, wenn ein GameObject aktiv ist, aber nur, wenn die Komponente aktiviert wurde. Weitere Unterschiede zu Awake sehen Sie in diesem Video.

Update wird einmal pro Frame aufgerufen. Hier befindet sich der Code, der die kontinuierlich laufende Logik wie Animationen, KI und andere Teile des Spiels definiert, die ständig aktualisiert werden müssen.

FixedUpdate benötigen Sie, wenn Sie an der Physik arbeiten.

Im Abschnitt "Scripting-Tutorials" finden Sie Tutorials zu FixedUpdate und Update. In diesen wird erklärt, wie Sie mit den Update- und FixedUpdate-Funktionen jeden Frame Änderungen herbeiführen und welche Unterschiede zwischen diesen beiden Funktionen bestehen..

LateUpdate ist eine ähnliche Funktion wie Update, wird aber am Ende des Frames aufgerufen. Unity betrachtet alle GameObjects, stellt alle Updates fest und ruft dann LateUpdates auf. Diese Funktion ist beispielsweise für die Kamera nützlich. Nehmen wir an, Sie möchten einen Charakter in Ihrem Spiel bewegen. Dieser stößt dann mit einem anderen Charakter zusammen und befindet sich danach an einer anderen Position. Wenn wir die Kamera gleichzeitig mit dem Charakter bewegen, käme es zu einem Ruckeln und die Kamera wäre nicht dort, wo sie sein sollte. Im Grunde ist diese Funktion ein zweiter Loop, der sehr praktisch sein kann.

Funktionen schreiben

Beachten Sie beim Schreiben von Funktionen, dass diese mit dem ausgegebenen Typ der Funktion beginnen, gefolgt vom Namen der Funktion und den Parametern in Klammern (falls vorhanden). Funktionsnamen beginnen mit einem Großbuchstaben, der Inhalt der Funktion steht in geschweiften Klammern. Hier sehen Sie ein Beispiel zum Schreiben einer Funktion:

writing functions unity

Wie rufen wir diese Funktion auf?

function-in-unity

Funktionen können Berechnungen durchführen und dann einen Wert ausgeben. Sie können eine Funktion auffordern, etwas zu tun, die Informationen zu verarbeiten und dann eine Antwort auszugeben. Wenn Sie den Typ "void" verwenden, gibt die Funktion nichts aus.

Klassen

Klassen sind Sammlungen dieser Variablen und Funktionen. Dieses Script ist beispielsweise eine Klasse:

class example in Unity

Denken Sie daran, dass der Name der Klasse mit dem Dateinamen des C#-Scripts übereinstimmen muss, damit dieses funktioniert. Um mit einem GameObject verbunden zu werden, muss sie von einer anderen Klasse namens MonoBehaviour stammen, die automatisch eingerichtet wird, wenn Sie damit beginnen, ein Script zu erstellen. Auch Klassen können öffentlich oder privat sein.

Wenn Sie in Unity eine benutzerdefinierte Klasse ("custom class") wie im Beispiel unten erstellen, müssen Sie dazu auffordern, diese zu serialisieren. Das bedeutet, dass die Klasse in einfache Daten umgewandelt wird, die Unity im Inspector lesen kann. Wenn Sie dies tun, sorgt Unity dafür, dass die Klasse im Inspector erscheint.

classes in unity example

Variablen, Funktionen und Klassen sind lediglich die Grundlagen, um mit dem Coding in Unity zu beginnen. Sehen Sie sich den Lernbereich an, wo Sie mehrere hilfreiche Scripting-Tutorials finden, in denen die Programmierung von Grund auf erläutert wird und mit denen Sie lernen können, wie Sie detaillierten Code für Ihre Projekte erstellen.