Ein einfaches „Movement“ Script

Einleitung

Eines der wichtigsten Bestandteile jedes Spiels erfordert ein Script ähnlich des folgenden, welches ich euch heute hier vorstellen möchte. Da ich selber nur in C# Programmiere ist auch dieses und alle weiteren Scripte in C#. Es sollte aber für die JavaScript Programmierer kein Problem sein dieses umzuschreiben.

Also, worum geht es?

So gut wie jedes Spiel hat Objekte, die sich bewegen müssen. Egal ob es sich dabei um ein klassisches Jump and Run handelt, oder um einen FPS Shooter. Bewegung ist für Spiele essentiell. Deshalb wird sich jeder Programmierer, der neu in der Thematik Unity3D ist, früher oder später mit der Frage auseinandersetzen wie denn nun Objekte bewegt bzw. ihre Position erkannt und verändert werden kann.

Transform

Jedes Unity GameObject besitzt eine Transform Komponente. Egal ob es sich dabei um ein sichtbares Objekt handelt, nur ein „Ordner“ für andere Scripts ist, oder keine bestimmte Funktionalität besitzt. Es wird immer eine Transform Komponente besitzen, die die aktuelle Position, Rotation und Skalierung des GameObjects enthält. Deswegen können wir in der Programmierung auch einfacher, als auf andere Komponenten, darauf zugreifen. Andere Komponenten müssen meist durch die GetComponent() Methode aufgerufen werden. Auf die Transform Komponente wird einfach über GameObject.transform zugegriffen.

Die Position

Bei der Eigenschaft „position“ der Transform Komponente handelt es sich um einen sogenannten Vector3. Ein Vector3 hat, neben anderen nützlichen Methoden, die drei Variablen x, y und z. Diese geben damit die Postion des GameObject als Koordinaten in deiner Spielwelt an.

Objekt Bewegen

Da sich die eben erwähnten Variablen x, y und z nicht direkt verändert werden können, müssen wir dort einen kleinen Umweg gehen. Wir müssen der Eigenschaft position einen komplett neuen Vector3 zuweisen. Und dadurch wird das GameObjekt an die angegebenen Koordinaten bewegt.

Dies war jetzt aber nur ein Ändern einer Position und kein richtiges Bewegen. Deshalb nutzen wir nun die Update() Methode, welche ähnlich wie die Start() Methode schon in jedem neuen Script definiert ist. Die Update() Methoden von allen aktiven Scripts werden mit jedem Frame einmal aufgerufen, wobei der zeitliche Abstand zwischen den Aufrufen je nach Leistung des Spiels bzw. des ausführenden Computers variieren kann. Deshalb werden Bewegungen üblicherweise noch mit Time.deltaTime multipliziert. Durch Time.deltaTime erhalten wir einen float, welcher die vergangene Zeit seit dem letzten Frame zurückliefert. Und somit stellen wir sicher, dass die Bewegungsgeschwindigkeit der GameObjects unabhängig von der Framerate, immer gleich bleibt.

Neben der Zeit als Multiplikator benötigen wir zusätzlich noch eine Richtung und eine Geschwindigkeit. Die Richtung wird ebenfalls mit einem Vector3 ausgedrückt. Die Werte sollten für die Achsen x, y und z normalerweise zwischen 0 und 1 liegen. Die Geschwindigkeit ist ein einfacher floag Wert und dient als Multiplikator. Er gibt also somit an wie schnell sich ein Objekt bewegen soll.

CharacterController Komponente

Da Ihr nun eine Vorstellung der Transform Komponente in Unity habt, gehen wir noch etwas weiter und verwenden zusätzlich die CharacterController Komponente. Wichtig dafür ist, dass ihr vorher dem selben GameObject welches das folgende Script erhält auch die CharacterController Komponente hinzufügt. Die CharacterController Komponente wird hauptsächlich für Spielfiguren eingesetzt. Wie beispielsweise der Hauptcharakter, Third Person Charakter, Gegner, usw. Sie folgen den Gesätzmäßigkeiten der Physik nur, wenn es Sinn macht. Sie können mit anderen Objekten kollidieren und somit Treppen oder Berge hochlaufen.

Und nun folgt das lang ersehnte Movement Script. Es beinhaltet die einfache Bewegung durch die Tasten WASD, die Rotation welche mit der Maus vorgenommen wird und eine Springen Funktion über die Leertaste. Dies sind die Standard definierten Tasten für den CharacterController.

Zum kompletten Script

Sinue

Mein Name ist Tim Gette. Ich bin 24 Jahre alt und gelernter Fachinformatiker in der Fachrichtung Anwendungsentwicklung. Seit sechs Jahren bin ich nun im Berufsleben unterwegs. Seit einigen Monaten habe ich mein Interesse an der Spiele-Entwicklung entdeckt und bin in das Thema Unity3D eingestiegen. Nun möchte ich versuchen anderen Neulingen in diesem Bereich den Einstieg durch hilfreiche Tipps & Tricks, Tutorials und einfach meine bereits gesammelten Erfahrungen zu erleichtern. Ich freue mich über jegliches Feedback zu meinen Artikeln und beantworte gerne eure Fragen. Mehr über mich erfahrt ihr auf der entsprechenden 'Über mich' Seite meines Blogs.
Menü schließen
×
×

Warenkorb