Ein Spiel mit Unity programmieren: Ein Leitfaden für Anfänger

Ein Spiel mit Unity programmieren: Ein Leitfaden für Anfänger
Diese Anleitung steht als kostenloses PDF zum Download bereit. Laden Sie diese Datei jetzt herunter . Fühlen Sie sich frei, dies zu kopieren und mit Ihren Freunden und Ihrer Familie zu teilen.

Ein überraschendes Merkmal der Internetwirtschaft ist der Aufstieg von Indie-Videospielen. Einst die exklusive Domäne von Tausend-Mann-Triple-A-Studios mit mehreren Millionen Dollar, wurden eine Reihe von Toolsets entwickelt, die moderne Spielentwicklungsressourcen in die Hände von Einzelpersonen oder kleinen Ad-hoc-Sammlungen von Programmierern und Designern bringen. Wir haben bereits die besten Indie-Spiele besprochen. Schauen Sie sich diese also an, um sich inspirieren zu lassen, was mit Tools wie Unity erreicht werden kann.





Diese Entwicklerteams für Indie-Spiele haben eine Agilität und Risikotoleranz bewiesen, die es ihnen in vielen Fällen ermöglicht, Gameplay-Innovationen schneller voranzutreiben als ihre Kollegen mit großem Budget. In den letzten Jahren wurden eine Reihe schockierend erfolgreicher Indie-Titel uraufgeführt, darunter Minecraft , Limbo , und super Fleischjunge , und selbst wenn Sie keine Fähigkeiten benötigen, um Spiele wie dieses zu erstellen, können Sie ein Spiel mit Buildbox erstellen.





In der sich schnell entwickelnden Landschaft der Indie-Spieleentwicklung, Einheit hat sich zu einem De-facto-Standard entwickelt: Seine geringen Kosten, die einfache Bedienung und der breite Funktionsumfang machen es ideal für die schnelle Spieleentwicklung. Unity ist so flexibel, dass Sie es sogar können Erstellen Sie Ihre eigenen benutzerdefinierten Gamecontroller mit ein bisschen DIY-Know-how!





Selbst große Studios wie CCP (Developers of Eva Online ) verwenden es für das schnelle Prototyping von Spielkonzepten. Unity bietet eine „Game Engine in a Box“ – eine Physik- und Rendering-Engine mit Hooks für mehrere Skriptsprachen, die an praktisch jedes Videospiel-Genre angepasst werden kann.

Während Unity einen visuellen Editor zum Manipulieren der Spielumgebung bereitstellt, ist Unity kein „Nullprogrammierungs“-Tool zur Erstellung von Spielen. Es erfordert, dass Sie programmieren müssen, um Ergebnisse zu erzielen, aber es gibt Ihnen auch ein viel flexibleres und leistungsfähigeres Werkzeug, als es jedes 'Spielemacher'-Programm möglicherweise könnte.



Unity wird Ihnen die Arbeit nicht abnehmen, aber es senkt die Eintrittsbarriere erheblich. Wenn Sie mit C++ und OpenGL ganz von vorne beginnen, kann es Tage dauern, bis Sie den Punkt erreicht haben, an dem tatsächlich etwas auf dem Bildschirm gerendert wird. Mit Unity dauert es etwa zehn Sekunden. Unity legt unerfahrenen Programmierern die Grundelemente der Spieleerstellung auf schnelle und intuitive Weise in die Hände.

Heute führe ich Sie durch alles, was Sie wissen müssen, um ein Spiel in Unity zu erstellen, das in zehn Hauptkapitel unterteilt ist:





§1–Versionen von Unity

§2 – Unity installieren





§3–Eine kurze Einführung in das objektorientierte Paradigma

§4–Unity-Grundlagen

§5–Beispiel: Grundelemente eines Spiels

§6 – Scripting in Unity

§7–Beispiel: Scripting Pong

§8 – Erkunden der Dokumentation / Weitere Informationen

§9 – Erstellen Ihres Spiels / Kompilieren zu einer eigenständigen Anwendung

§10-Schlussnotizen

1. Versionen von Unity

Unity gibt es in zwei Grundvarianten: der Pro-Version und der kostenlosen Version. Es gibt a Anzahl der Unterschiede , aber im Großen und Ganzen unterstützt die Pro-Version eine Reihe von visuellen Verbesserungen (wie Echtzeit-Soft Shadows und Nachbearbeitung) und eine große Anzahl relativ kleinerer Funktionen, die für komplexere Spiele äußerst hilfreich sind.

Für die meisten relativ einfachen Spiele, die Sie vielleicht erstellen möchten, ist die kostenlose Version von Unity jedoch vollkommen ausreichend. Wir werden die wichtigsten Unterschiede im Folgenden für Interessierte genauer aufschlüsseln.

1.1 Preise

Die kostenlose Version von Unity ist natürlich kostenlos. Es gibt jedoch einige Einschränkungen: Die kostenlose Version von Unity kann nicht an Unternehmen mit einem Jahreseinkommen von mehr als lizensiert werden 100.000 $ . Obwohl solche Organisationen den Rahmen dieses Handbuchs sprengen würden, ist es wahrscheinlich ratsam, sich für die Pro-Version zu entscheiden, wenn Sie vermuten, dass Sie eine solche Organisation werden könnten.

Die Pro-Version von Unity ist $ 75 einen Monat, oder 1500 $ für eine dauerhafte Lizenz und hat keine Grenzen, was Sie mit den damit erstellten Spielen machen können. Es gibt auch eine kostenlose 30-Tage-Testversion, die wir für dieses Handbuch verwenden werden, um Ihnen einen möglichst vollständigen Überblick über die verfügbaren Funktionen zu geben. Eine einjährige Studentenlizenz ist ebenfalls erhältlich über Lernen zum $ 129 .

1.2 Funktionen

In der kostenlosen Version von Unity fehlen viele Funktionen. Die wichtigsten Unterschiede sind jedoch folgende: In der kostenlosen Version von Unity fehlen eine Reihe von Rendering-Optionen, die besser aussehende, schneller laufende Spiele ermöglichen (LOD-Unterstützung, Nachbearbeitung des Bildschirmbereichs, erweiterte Shader, Echtzeit-Soft Schatten und verzögertes Rendering). Es fehlt auch das volle Bewegungsanimationssystem , und einige KI-Tools.

Generell lohnt sich bei komplexen Großprojekten oder Projekten, bei denen es auf grafische Leistung ankommt, die Pro-Version. Ich verwende die Pro-Version, weil ich Virtual-Reality-Spiele für die Oculus Rift entwickle und die Unterstützung für die Nachbearbeitung des Bildschirmbereichs erforderlich ist, um korrekt mit dem Headset zu interagieren.

2. Unity installieren

Unity ist einfach zu installieren. Sie können die ausführbare Datei herunterladen von unity3d.com/get-unity/download .

Führen Sie es nach dem Herunterladen aus und befolgen Sie dann die Anweisungen des Installationsprogramms. Wenn die Installation abgeschlossen ist, wird ein Fenster mit dem Titel „Aktivieren Sie Ihre Unity-Lizenz“ angezeigt. Aktivieren Sie das Kontrollkästchen 'Kostenlose 30-Tage-Testversion von Unity Pro aktivieren' und dann 'OK'.

Herzliche Glückwünsche! Sie haben jetzt eine 30-tägige Testversion von Unity Pro. Wenn die Testversion abläuft und Sie die Pro-Version nicht kaufen möchten, können Sie zur kostenlosen Version wechseln und Ihre vorhandenen Inhalte behalten.

lustige Sachen mit Himbeer-Pi

3. Eine kurze Einführung in das objektorientierte Paradigma

Bevor Sie mit Unity beginnen, ist es wichtig, dass wir uns ein wenig mit den Grundlagen befassen. Unity unterstützt beides C # und JavaScript zum Spielprogrammierung ; In diesem Tutorial arbeiten wir mit C#.

Wenn Sie noch nie zuvor programmiert haben, legen Sie dieses Tutorial zunächst beiseite und verbringen Sie ein paar Tage damit, Microsofts C # Sprachfibel bis Sie sich wohl fühlen, die Sprache für einfache Aufgaben zu verwenden.

Wenn Sie etwas anderes als C# möchten (aber nicht unbedingt eine Sprache, die Sie in Unity verwenden können), werfen Sie einen Blick auf unseren Leitfaden zu den sechs einfachsten Programmiersprachen für Anfänger.

Wenn Sie schon einmal in einer imperativen oder objektorientierten Sprache wie C oder Java programmiert haben, überfliegen Sie die Einführung und machen Sie sich damit vertraut, wie sich C# von anderen Sprachen unterscheidet, die Sie in der Vergangenheit verwendet haben. Fahren Sie in jedem Fall mit dem Tutorial nicht fort, bis Sie sich wohl fühlen, einfache Probleme mit C# zu lösen (wenn ich Sie zum Beispiel bitten würde, ein Programm zu schreiben, das die ersten hundert Primzahlen ausgibt, sollten Sie dieses Programm ohne schreiben können Beratung bei Google).

Das wichtigste hier zu verstehende Konzept ist das objektorientierte Paradigma (abgekürzt als OFFEN ). In objektorientierten Sprachen werden Programme in funktionale Einheiten unterteilt, die als bezeichnet werden Objekte . Jedes Objekt hat seine eigenen privaten Variablen und Funktionen. Objektspezifische Funktionen werden aufgerufen Methoden .

Die Idee hier ist Modularität: Indem Sie jedes Objekt isolieren und andere Objekte durch seine Methoden dazu zwingen, mit ihm zu interagieren, können Sie die Anzahl möglicher unbeabsichtigter Interaktionen reduzieren – und damit auch Fehler. Sie können auch Objekte erstellen, die Sie später ohne Änderungen wiederverwenden können. In Unity baust du diese Objekte und hängst sie an Spielentitäten (dessen Verhalten sie regieren werden).

Objekte werden instanziiert aus Klassen : Eine Klasse ist nur eine Datei, die die Definition Ihres Objekts enthält. Also, wenn du willst mook Objekt, das die KI für einen Feind in Ihrem Spiel verarbeitet, würden Sie eine 'Mook'-Klasse schreiben und diese Datei dann an jede feindliche Entität anhängen. Wenn Sie Ihr Spiel ausführen, wird jeder Feind mit einer Kopie des 'Mook'-Objekts ausgestattet.

Das Anhängen eines neuen Skripts an ein Objekt sieht so aus:

Zuerst, wähle das Objekt aus und geh zum Inspektor . Klicken Sie auf die Komponente hinzufügen Taste.

Gehe zu neues Skript , geben Sie den gewünschten Namen ein und klicken Sie auf erstellen und hinzufügen .

Jetzt haben Sie ein neues Skript, das Sie durch Doppelklick bearbeiten können!

Eine Klassendatei sieht in etwa so aus:

using UnityEngine;
public class Mook : MonoBehaviour {
private float health;
void Start () {
health = 100;
}
void Update(){
if (health > 0) {
/* Search for player
if you encounter the player on the road, kill him
if you get shot, remove a random amount of health */
}
}
}

Lassen Sie uns das aufschlüsseln:

  • Verwenden von UnityEngine: Diese Zeile teilt C# mit, dass wir die Bibliotheken von Unity verwenden möchten, die es uns ermöglichen, eine Verbindung zur Unity-Spiel-Engine herzustellen.
  • Öffentliche Klasse Mook : MonoVerhalten: Diese Zeile deklariert die Klasse und ihren Namen -- mook .
  • Gesundheit privater Schwimmer: Dies deklariert eine private Klassenvariable (die nur innerhalb der Klasse geändert werden kann). Die Variable erhält einen Wert in Start .
  • Ungültiger Start(): Dies deklariert eine Methode namens Start . Start ist eine spezielle Methode, die nur einmal ausgeführt wird, wenn das Spiel zum ersten Mal gestartet wird.
  • Ungültiges Update(): Update ist eine weitere spezielle Methode, die bei jedem Frame ausgeführt wird. Der Großteil Ihrer Spiellogik wird hier platziert.
  • //Wenn du dem Spieler auf der Straße begegnest, töte ihn: Diese Zeile ist ein Kommentar (jede Zeile, die mit einem doppelten Schrägstrich beginnt, wird von C# ignoriert). Kommentare werden verwendet, um sich daran zu erinnern, was bestimmte Code-Bits tun. In diesem Fall wird dieser Kommentar verwendet, um einen komplizierteren Codeblock zu ersetzen, der tatsächlich das tut, was der Kommentar beschreibt.

Zusammen mit Start und Aktualisieren , können Sie Ihre eigenen Methoden mit fast jedem Namen instanziieren. Von Ihnen erstellte Methoden werden jedoch erst ausgeführt, wenn sie aufgerufen werden. Lassen Sie uns eine Methode für eine hypothetische Klasse namens deklarieren addTwoNumbers das addiert zwei Zahlen:

public float addTwoNumbers(float a, float b) {
return a+b;
}

Dies deklariert eine öffentliche (für andere Objekte zugängliche) Methode, die einen Float zurückgibt, genannt addTwoNumbers , die zwei Floats als Eingabe akzeptiert (genannt zu und B ). Es gibt dann die Summe der beiden Werte als Ausgabe zurück.

Aufruf dieser Methode innerhalb derselben Klasse (sagen wir von innen Aktualisieren ) sieht aus wie das:

float result = addTwoNumbers(1, 2);

Das Aufrufen der Methode aus einer anderen Klasse ist ähnlich:

addTwoNumbers instance;
float result = instance.addTwoNumbers(1, 2);

Auch dies erstellt nur eine Instanz unserer Klasse, greift auf die entsprechende Methode zu und füttert sie mit den Zahlen, die wir hinzufügen möchten, und speichert dann das Ergebnis in Ergebnis . Einfach.

Wenn Ihr Skript an ein Objekt angehängt ist, das spezielle Eigenschaften hat (wie ein Partikelemitter), auf das mit dem normalen Satz von GameObject-Parametern nicht zugegriffen werden kann, können Sie es als eine andere Art von Spielobjekt behandeln, indem Sie das GetComponent Methode.

Die Syntax dafür sieht so aus:

GetComponent().Play();

Wenn Ihnen dies nicht bekannt ist, gehen Sie zurück und gehen Sie die C#-Einführung durch. Es wird Ihnen eine Menge Frustration ersparen, während wir fortfahren.

4. Unity-Grundlagen

In diesem Abschnitt arbeiten wir uns durch die grundlegende Mechanik der Unity-Engine. Der Workflow in Unity läuft ungefähr so ​​ab:

  1. Erstellen Sie eine Entität, um eine Rolle im Spiel zu erfüllen (leer Spielobjekte kann für abstrakte logische Aufgaben verwendet werden).
  2. Schreiben oder suchen Sie eine Klassendatei und fügen Sie sie der Entität als Skript hinzu (mit dem Komponente hinzufügen Knopf im Inspektor Aussicht.
  3. Lauf > Prüfung > debuggen > wiederholen bis es funktioniert und fahren Sie mit dem nächsten Element des Spiels fort.

Unity wird mit einer Reihe von grundlegenden Ansichtsregisterkarten geliefert, die auf verschiedene Weise nach dem Geschmack des Benutzers angeordnet werden können. Die Big Five sind:

  1. Spiel: zeigt eine laufende Instanz des Spiels an, mit der Sie interagieren und die Sie testen können.
  2. Szene: bietet eine statische, bearbeitbare Version des Spielewelt .
  3. Inspektor: ermöglicht es Ihnen, einzelne Entitäten in der Spielwelt zu ändern, indem Sie sie im . auswählen Editor Tab.
  4. Projekt: ermöglicht Ihnen das Durchsuchen der Projektdateien und das Ziehen von Modellen, Materialien und anderen Ressourcen in die Editor Tab, um sie in der Spielwelt zu platzieren.
  5. Hierarchie: Auf dieser Registerkarte werden alle Objekte der Welt angezeigt, sodass Sie entfernte Objekte in der Szene und übergeordnete Objekte durch Klicken und Ziehen finden können.

Siehe das Diagramm unten für die Standorte all dieser Dinge:

4.1 Einheitseinheiten

4.1.1 Netze

Maschen sind der Weg 3D-Geometrie ist in Einheit vertreten. Sie können entweder das integrierte von Unity verwenden Primitive Objekte (Würfel, Kugeln, Zylinder usw.) oder importieren Sie Ihre eigenen 3D-Modelle aus einem Modellierungspaket wie Mixer oder Maya . Unity unterstützt eine Vielzahl von 3D-Formaten, einschließlich .fbx , und .3ds .

Die grundlegenden Werkzeuge zum Bearbeiten von Netzen sind die Skalierungs-, Rotations- und Übersetzungsschaltflächen in der oberen linken Ecke der Benutzeroberfläche. Diese Schaltflächen fügen den Modellen in der Editoransicht Steuersymbole hinzu, mit denen sie dann im Raum manipuliert werden können. Um die Textur- oder Physikeigenschaften eines Objekts zu ändern, wählen Sie sie aus und verwenden Sie die Inspektor Ansicht, um die . zu analysieren Material und starrer Körper Elemente.

4.1.2 GUI-Elemente

Herkömmliche GUI-Sprites und Text können mit der GUI-Text und der GUI-Textur GameObjects im Editor. Ein robusterer und realistischerer Weg zum Umgang mit UI-Elementen ist jedoch die Verwendung der 3D-Text und Quad GameObjects (mit transparenten Texturen und einem unbeleuchteten transparenten Shader), um HUD-Elemente als Entitäten in die Spielwelt zu platzieren.

In dem Hierarchie Ansicht können diese Gameplay-Elemente auf die Hauptkamera gezogen werden, um sie zu Kindern zu machen, um sicherzustellen, dass sie sich mit der Kamera bewegen und drehen.

GUI-Elemente (Text und Texturen) können in Größe und Maßstab über die entsprechenden Felder im Inspektor-Tab angepasst werden.

4.1.3 Materialien

Materialien sind Kombinationen aus Texturen und Shadern und können vom Projekt-Tab direkt auf Spielobjekte gezogen werden. Unity Pro enthält eine große Anzahl von Shadern, und Sie können die ihnen zugewiesene Textur mithilfe der Registerkarte „Informationen“ für ein Objekt anpassen, auf das sie angewendet werden.

Um eine Textur zu importieren, konvertieren Sie sie in a .jpg , .png , oder .bmp , und ziehen Sie es in das Vermögenswerte Ordner unter dem Unity-Projektverzeichnis (erscheint in Meine Dokumente standardmäßig). Nach einigen Sekunden erscheint im Editor ein Ladebalken. Wenn es fertig ist, finden Sie das Bild als Textur unter dem Projekt Tab.

4.1.5 Lichter

Lichter sind Spielobjekte die Strahlen auf die Welt projizieren. Wenn Ihre Szene keine Lichter enthält, werden alle Polygone mit derselben Helligkeitsstufe gezeichnet, wodurch die Welt ein flaches, verwaschenes Aussehen erhält.

Lichter können positioniert und gedreht werden und haben mehrere interne Eigenschaften, die Sie anpassen können. Die Intensität Schieberegler steuert die Helligkeit des Lichts, und der Bereich steuert, wie schnell es ausgeblendet wird.

Die Richtlinien in der Szenenansicht zeigen Ihnen die maximale Reichweite der Beleuchtung an. Spielen Sie mit beiden Einstellungen, um den gewünschten Effekt zu erzielen. Sie können auch die Farbe des Lichts, das Muster ( Plätzchen auf der Oberfläche angezeigt, auf die das Licht gerichtet ist, und welche Art von Streulicht auf dem Bildschirm erscheint, wenn Sie direkt in das Licht schauen. Das Cookie kann verwendet werden, um realistischere Lichtmuster zu fälschen, dramatische falsche Schatten zu erzeugen und Projektoren zu simulieren.

Die drei Hauptlichtarten sind Stelle , Punkt , und gerichtet .

Scheinwerfer haben eine Position im 3D-Raum und projizieren Licht nur in eine Richtung in einem Kegel mit variablem Winkel. Diese eignen sich gut für Taschenlampen und Suchscheinwerfer und ermöglichen Ihnen im Allgemeinen eine genauere Steuerung der Beleuchtung. Spotlights können Schatten werfen.

Punktlichter einen Ort im 3D-Raum haben und Licht gleichmäßig in alle Richtungen werfen. Punktlichter werfen keine Schatten.

Richtungslichter , schließlich, simulieren Sonnenlicht: Sie projizieren Licht in eine Richtung wie aus unendlicher Ferne. Gerichtete Lichter wirken sich auf jedes Objekt in der Szene aus und können Schatten erzeugen.

4.1.6 Partikelsysteme

ZU Partikelsystem ist ein Spielobjekt die Hunderte oder Tausende von Partikeln gleichzeitig erzeugt und kontrolliert. Partikel sind kleine, optimierte 2D-Objekte, die im 3D-Raum angezeigt werden. Partikelsysteme verwenden vereinfachtes Rendering und Physik, können aber Tausende von Objekten in Echtzeit ohne Stottern anzeigen, was sie ideal für Rauch, Feuer, Regen, Funken, magische Effekte und mehr macht.

Es gibt viele Parameter, die Sie optimieren können, um diese Effekte zu erzielen, und Sie können darauf zugreifen, indem Sie ein Partikelsystem unter dem erzeugen Komponenteneditor > Auswahl des Partikelsystems > Öffnen des Inspektor-Tabs . Sie können die Größe, Geschwindigkeit, Richtung, Drehung, Farbe und Textur jedes Partikels ändern und die meisten dieser Parameter auch so einstellen, dass sie sich im Laufe der Zeit ändern.

Unter dem Kollision -Attribut, wenn Sie es aktivieren und den Simulationsraum auf . setzen Welt Sie erhalten Partikel, die mit Objekten in der Welt kollidieren, die für eine Reihe realistischer Partikeleffekte verwendet werden können, darunter Regen, bewegtes Wasser und Funken.

5. Beispiel: Grundelemente eines Spiels

Für dieses Tutorial machen wir ein einfaches Spiel mit Pong -- etwas, das wir schon mehrmals in DIY behandelt haben:

  • Arduino Classic Pong
  • Arduino OLED-Pong

In diesem Abschnitt gehen wir auf die Anordnung der Kernelemente ein – das Skript-Tutorial folgt später.

Lassen Sie uns zunächst das Spiel Pong in seine Grundkomponenten zerlegen. Zuerst brauchen wir zwei Paddel und einen Ball. Der Ball fliegt außerhalb des Bildschirms, also brauchen wir einen Mechanismus, um ihn zurückzusetzen. Wir möchten auch, dass Text den aktuellen Spielstand anzeigt, und um Ihnen alle Kernelemente von Unity zu zeigen, möchten wir einen ausgefallenen Partikeleffekt, wenn Sie den Ball treffen. Das ganze Spiel muss dramatisch beleuchtet werden.

Das zerfällt in a Kugelobjekt (eine Kugel), a Spawner , zwei Paddelstützen mit Partikelemitter angehängt ein 3D-Texteinheit , und ein Scheinwerfer . Für dieses Tutorial verwenden wir das standardmäßige physikalische Material prallen , mit hüpfen kombinieren einstellen multiplizieren . So sieht das Setup in zehn Screenshots aus:

Erstellen Sie zuerst a Würfelstütze für das Paddel.

Skalieren Sie es entsprechend, duplizieren , und setze a Kugel zwischen den Schlägern für den Ball.

Dann erstellen Sie a 3DText-Objekt und Skala und Position es richtig, ändern die Schriftgröße -Attribut, um ein weniger pixeliges Bild zu erhalten.

Als nächstes erstellen Sie zwei Partikelsysteme , wählen Sie die gewünschten Eigenschaften aus und befestigen Sie sie an den Paddeln.

Als nächstes möchten Sie positionieren und drehen Sie die Kamera damit es die Szene richtig umrahmt. Während die Kamera ausgewählt ist, sehen Sie in der unteren rechten Ecke eine kleine Vorschau der Kameraansicht.

Bevor wir fertig sind, müssen wir zwei zusätzliche Würfel als Stoßfänger erstellen, um zu verhindern, dass der Ball aus dem Spielbereich springt. Wir können sie unsichtbar machen, indem wir das Häkchen entfernen Mesh-Renderer in dem Registerkarte 'Inspektor' .

Wenn Sie auf „Spielen“ klicken, können Sie jetzt die Grundelemente unseres Spiels sehen. Sie werden noch nichts tun, aber dazu kommen wir!

Nun, da wir dieses Setup haben, werden wir darüber sprechen, was beim Skripting dieser Elemente erforderlich ist, um ein Spiel zu erstellen.

6. Skripterstellung in Unity

Sobald Sie ein Skript an ein Objekt angehängt haben, können Sie es überarbeiten, indem Sie es im doppelklicken Inspektor . Dies öffnet MonoDevelop , die Standard-Entwicklungsumgebung für Unity. Im Wesentlichen ist Monodevelop ein Texteditor mit speziell für die Programmierung optimierten Funktionen.

Schlüsselwörter und Kommentare werden in . hervorgehoben Blau und Grün , und numerische Werte und Strings erscheinen in Netz . Wenn Sie verwendet haben Finsternis oder anderen IDEs ist MonoDevelop sehr ähnlich. Du kannst bauen Ihre Skripte aus dem Editor heraus, um auf Syntaxfehler zu prüfen, wie folgt:

Damit Ihr Skript mit Unity interagiert, müssen Sie im Allgemeinen auf Elemente verweisen, die das Objekt enthält, das das Skript enthält (eine Liste dieser Elemente finden Sie unter Inspektor Registerkarte, wenn das entsprechende Objekt ausgewählt ist). Sie können dann für jedes dieser Elemente Methoden aufrufen oder Variablen festlegen, um die gewünschten Änderungen vorzunehmen.

Wenn Sie möchten, dass ein Skript für ein Objekt die Eigenschaften eines anderen Objekts beeinflusst, können Sie ein leeres . erstellen Spielobjekt Variable in Ihrem Skript und verwenden Sie die Inspektor um es einem anderen Objekt in der Szene zuzuweisen.

Eine Liste der Elemente, die ein Objekt haben könnte, sieht wie folgt aus (aus der Inspektoransicht eines unserer Paddles im obigen Beispiel):

  1. Verwandeln
  2. Würfel (Mesh-Filter)
  3. Box Collider
  4. Mesh-Renderer

Jeder dieser Aspekte des Objekts kann innerhalb eines Skripts beeinflusst werden. Als nächstes schauen wir uns genau an, wie.

6.1 Transformieren

Die Transformationsfunktionen für ein GameObject in Unity steuern die physikalischen Parameter dieses Objekts: Skala , es ist Position , und sein Orientierung . Sie können über ein Skript wie folgt darauf zugreifen:

transform.position = newPositionVector3;
transform.rotation = newRotationQuaternion;
transform.localScale = newScaleVector3;

In den obigen Beispielen sind die benannten Variablen von den in den Namen angegebenen Typen. Hier gibt es ein paar wichtige Details: Position und Maßstab werden erwartungsgemäß gespeichert als Vektor3s . Sie können auf die x , UND , und MIT Bestandteile von jedem (z. transform.position.y gibt die Entfernung eines Objekts über der Nullebene an).

Allerdings zu vermeiden Gimbal-Sperre , Drehungen werden behandelt als Quaternionen (Vierkomponentenvektoren). Da die manuelle Manipulation von Quaternionen nicht intuitiv ist, können Sie Drehungen mit Eulerschen Winkeln manipulieren, indem Sie die Quaternion.Euler Methode wie folgt:

transform.rotation = Quaternion.Euler(pitch, yaw, roll);

Wenn Sie Objekte reibungslos von einem Ort zum anderen bewegen möchten, finden Sie die Slerp Methode für Quaternionen und Vektor3s hilfreich. Slerp nimmt drei Argumente auf - den aktuellen Zustand, den endgültigen Zustand und die Änderungsgeschwindigkeit und interpoliert nahtlos zwischen ihnen mit der gegebenen Geschwindigkeit. Die Syntax sieht so aus:

transform.position = Vector3.Slerp(startPositionVector3, newDestinationVector3, 1);

6.2 Renderer

Mit den Renderer-Funktionen in Unity können Sie steuern, wie die Oberflächen von Requisiten auf dem Bildschirm gerendert werden. Sie können die Textur neu zuweisen, die Farbe ändern und den Shader und die Sichtbarkeit des Objekts ändern. Die Syntax sieht so aus:

renderer.enabled = false;
renderer.material.color = new Color(0, 255, 0);
renderer.material.mainTexture = myTexture;
renderer.material.shader = newShader;

Die meisten davon haben ziemlich klare Funktionen. Das erste Beispiel macht das fragliche Objekt unsichtbar: ein nützlicher Trick in einer Reihe von Situationen. Das zweite Beispiel weist ein neues . zu RGB-Farbe (nämlich grün) auf das fragliche Objekt. Die dritte weist die diffuse Haupttextur einer neuen Texturvariablen zu. Das letzte Beispiel ändert den Shader des Objektmaterials in eine neu definierte Shader-Variable.

6.3 Physik

Unity wird mit einer integrierten Physik-Engine geliefert – etwas, das alle Physik-Sandbox-Spiele verwenden. Auf diese Weise können Sie die physikalischen Eigenschaften von Objekten zuweisen und die Details ihrer Simulation für Sie erledigen lassen. Im Allgemeinen ist es einfacher und robuster, die Physik-Engine von Unity so weit wie möglich zu verwenden, anstatt zu versuchen, Ihre eigene Physik mithilfe eines Lehrbuchs und des Transformationssystems zu implementieren.

Alle Physik-Requisiten erfordern Collider . Die eigentliche Simulation selbst wird jedoch von a starrer Körper , die im hinzugefügt werden können Inspektor Aussicht. Starre Körper können sein Kinematik oder nichtkinematisch .

Kinematische Physik-Requisiten kollidieren mit (und bewirken) nicht-kinematischen Physik-Requisiten um sie herum, bleiben aber selbst von Kollisionen unberührt. Statische kinematische Stützen sind die sprichwörtlichen unbeweglichen Objekte, und sich bewegende kinematische Objekte sind die sprichwörtliche unaufhaltsame Kraft (für das Protokoll, wenn sie kollidieren, gehen sie einfach durcheinander hindurch).

Darüber hinaus können Sie den Winkelwiderstand des Objekts anpassen (wie viel Energie benötigt wird, um es zu drehen), seine Masse ändern, bestimmen, ob es von der Schwerkraft beeinflusst wird oder nicht, und Kräfte darauf ausüben.

Beispiele:

rigidbody.angularDrag = 0.1f;
rigidbody.mass = 100;
rigidbody.isKinematic = false;
rigidbody.useGravity = true;
rigidbody.AddForce(transform.forward * 100);

Diese sind alle ziemlich selbsterklärend. Das einzige, was hier zu beachten ist, ist die Verwendung von transform.forward . Vector3 hat alle drei Komponenten ( .nach vorne , .hoch , und .rechts ) mit ihnen verknüpft, auf die zugegriffen werden kann und mit ihnen rotiert ( nach vorne ist die Richtung des blauen Pfeils im Editor). Die transform.forward Schlüsselwort ist einfach der Vorwärtsvektor für das aktuelle Objekt mit Magnitude 1. Er kann mit einem Float multipliziert werden, um mehr Kraft auf das Objekt zu erzeugen. Sie können auch verweisen transform.up und transform.rechts , und negieren Sie sie, um ihre Umkehrungen zu erhalten.

6.4 Kollision

Beim Erstellen eines Spiels möchten Sie oft, dass eine Kollision zu einer Zustandsänderung in Ihrem Code führt, die über die reine Physiksimulation hinausgeht. Dazu benötigst du a Kollisionserkennungsmethode .

Es ist eine gewisse Vorbereitungsarbeit erforderlich, um Kollisionen in Unity zu erkennen. Erstens benötigt mindestens eines der Objekte in der Kollision a nicht-kinematischer Starrkörper angehängt an. Beide Objekte müssen über korrekte Collider verfügen, die auf Nicht-Trigger eingestellt sind. Die Gesamtgeschwindigkeit beider Objekte muss so gering sein, dass sie tatsächlich kollidieren, anstatt einfach durcheinander zu springen.

Wenn Sie sich um alles gekümmert haben, können Sie auf Kollision prüfen, indem Sie eine spezielle Kollisionserkennungsmethode in ein Skript einfügen, das an das Objekt angehängt ist, mit dem Sie die Kollision prüfen möchten. Die Methode wird wie folgt aussehen:

void OnCollisionEnter(Collision other) {
//do things here
}

Diese Methode wird automatisch während des ersten Frames ausgeführt, in dem ein anderes Objekt Ihr Objekt berührt. Die Kollisionsentität Sonstiges ist ein Verweis auf das Objekt, das Sie treffen. Sie können zum Beispiel auf seine . verweisen Spielobjekt , starrer Körper , und verwandeln Eigenschaften, um es auf verschiedene Weise zu manipulieren. Während OnCollisionEnter ist wahrscheinlich die am häufigsten verwendete Funktion, die Sie auch verwenden können OnCollisionExit und OnCollisionStay (mit ansonsten identischer Syntax und Verwendung), die während des ersten Frames aktivieren, dass Sie aufhören, mit einem Objekt zu kollidieren, bzw. bei jedem Frame, in dem Sie mit einem Objekt kollidieren.

Manchmal kann es auch nützlich sein, das zu tun, was genannt wird Raycasting . Beim Raycasting wird eine unendlich dünne Linie (a Strahl ) wird von irgendeinem Ursprung entlang eines Vektors durch die Welt geworfen, und wenn es auf etwas trifft, werden die Position und andere Details der ersten Kollision zurückgegeben. Der Code für einen Raycast sieht so aus:

RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit)) {
float distanceToGround = hit.distance;
}

Dies wirft einen Strahl von der Position des aktuellen Objekts entlang -Vector3.up (gerade nach unten) und verknüpft die Variable Schlag zum ersten Objekt, mit dem es kollidiert. Sobald dein Strahl etwas getroffen hat, kannst du darauf zugreifen Treffer.Entfernung um zu bestimmen, wie weit es entfernt ist, oder hit.GameObject um das getroffene Objekt zu manipulieren.

Raycasts wie diese können für Schützen verwendet werden, um zu bestimmen, worauf die Waffe gerichtet ist, oder um Objekte auszuwählen, wenn die Kamera sie ansieht, oder für bestimmte Arten der Bewegungsmechanik.

6.5 Zeitkorrektur

Ein wichtiger Faktor, den Sie beachten sollten, wenn Sie Objekte auf diese Weise manipulieren, ist: Bildrate . Egal wie sorgfältig Sie optimieren, die Frameraten variieren immer, und Sie möchten nicht, dass Ihre Spielgeschwindigkeit entsprechend variiert. Wenn jemand anderes Ihr Spiel auf einem schnelleren Computer ausführt, als Sie es entwickelt haben, möchten Sie nicht, dass das Spiel mit doppelter Geschwindigkeit läuft.

Sie korrigieren dies, indem Sie die von Ihnen verwendeten Werte mit der Zeit multiplizieren, die zum Rendern des letzten Frames benötigt wurde. Dies geschieht mit Zeit.deltaZeit . Dies ändert effektiv die Geschwindigkeit jeder Variablen, von der aus Sie jeden Frame inkrementieren Wechsel pro Frame zu Änderung pro Sekunde , und Sie sollten diese Änderung wahrscheinlich an jedem Wert vornehmen, den Sie für jeden Frame erhöhen oder verringern.

6.6 Audioquellen und Hörer

Nachdem wir uns nun mit dem Erstellen, Rendern und Steuern von Objekten befasst haben, sprechen wir über den anderen Sinn, den Computerspiele erfüllen können: nämlich Klang . Unity unterstützt zwei Arten von Sounds: 2D und 3D Geräusche. 3D-Sounds variieren ihre Lautstärke je nach Entfernung und verzerren sich, wenn sie sich relativ zur Kamera bewegen. 2D-Sounds nicht.

2D-Sounds eignen sich für Voice-Overs und Hintergrundmusik, und 3D-Sounds gelten für Geräusche, die von Ereignissen in der Welt erzeugt werden. Um zu ändern, ob ein Sound 3D ist oder nicht, wählen Sie ihn im Projekt anzeigen, wechseln zum Inspektor anzeigen und die entsprechende Option aus dem Dropdown-Menü auswählen, dann die Taste drücken Wiedereinfuhr Taste.

Um den Ton tatsächlich abzuspielen, müssen Sie ein Audio quelle zu einer Requisite (der Requisite, von der der Ton stammen soll, im Falle eines 3D-Sounds). Dann musst du die öffnen Audio clip Feld und wählen Sie Ihre Sounddatei aus.

wird Tiktok verboten

Sie können verwenden myAudioSource.Pause() und myAudioSource.Play () um diese Sounddateien zu steuern. Sie können das Abfallverhalten, die Lautstärke und die Dopplerverschiebung der Töne unter dem Inspektor Registerkarte für die Audioquelle.

6.7 Eingabe

Ein Spiel, das keine Eingaben vom Benutzer erfordert, ist kein großes Spiel. Es gibt viele verschiedene Arten von Eingaben, die Sie einlesen können, und fast alle sind über das Eingang und SchlüsselCode Objekte. Einige Beispiele für Eingabeanweisungen (bei denen für jeden Frame ein Wert ausgewertet wird) sind unten aufgeführt.

Vector3 mousePos = Input.mousePosition;
bool isLeftClicking = Input.GetMouseButton(0);
bool isPressingSpace = Input.GetKey(KeyCode.Space);

Die Funktionen dieser Leitungen sind größtenteils selbsterklärend. Mithilfe dieser drei Arten von Eingabereferenzen können Sie die Steuerungsschemata der meisten modernen 3D-Computerspiele rekonstruieren.

6.8 Debuggen eines Skripts

Nehmen wir an, ein Skript funktioniert nicht. Wie der gute Arzt sagt, können Ihnen Pannen und Aufhängungen passieren. Wenn Ihr C# direkte Syntaxfehler aufweist, wird das Spiel im Allgemeinen nicht ausgeführt, wenn Sie auf Play klicken, und einige ziemlich nützliche Fehlermeldungen werden angezeigt, wenn Sie bauen die Skripte aus dem Editor heraus. Siehe unten:

Diese Fehler sind normalerweise nicht die am schwierigsten zu behebenden. Was problematischer sein kann, sind subtile semantische Fehler, bei denen Sie erfolgreich eine Datei mit gültigem C# geschrieben haben – nur keine, die das tut, was Sie dachten. Wenn einer dieser Fehler auftritt und Sie Schwierigkeiten haben, ihn aufzuspüren, können Sie einige Dinge versuchen, um die Situation zu verbessern.

Die erste besteht darin, die Ausführung des Spiels anzuhalten und die Konsole zu überprüfen. Du kannst das Spiel pausieren, indem du auf klickst Pause Symbol im oberen mittleren Teil des Editors und wählen Sie dann Konsole von unten Fenster Menü (oder drücken Sie Strg > Schicht > C ). Auch wenn keine Fehler aufgetreten sind, können Warnungen dennoch helfen, Hinweise darauf zu geben, was möglicherweise schief läuft.

Wenn dies nicht funktioniert, können Sie auch versuchen, sich ein Bild vom Status Ihres Skripts zu machen, indem Sie den Status der internen Variablen ausgeben, um zu überprüfen, ob das Programm das tut, was Sie denken. Sie können verwenden Debug.Log(String) um den Inhalt eines Strings an die Konsole auszugeben, wenn die Programmausführung diese Zeile erreicht. Im Allgemeinen, wenn Sie von dem, was Sie denken, was passieren sollte, rückwärts durch die Dinge arbeiten, die es passieren sollten, werden Sie irgendwann einen Punkt erreichen, an dem Ihre Debug-Ausgaben nicht das tun, was Sie von ihnen erwarten. Da liegt dein Fehler.

7. Beispiel: Pong schreiben

Um Pong zu bauen, zerlegen wir das Spiel in seine Kernelemente: Wir brauchen einen Ball, der mit zunehmender Geschwindigkeit zwischen den Schlägern hin und her abprallt, wir brauchen eine Anzeigetafel, die weiß, wann die Bälle die Schläger passiert haben, und wir brauchen einen Mechanismus, um Pong zu bauen den Ball neu zu starten, wenn das passiert. Ein guter erster Schritt wäre, dem Ball einen nicht-kinematischen Starrkörper, den Paddeln zwei kinematische Starrkörper hinzuzufügen, die Schwerkraft für alle zu deaktivieren und ein geeignetes physikalisches Material aus den Standard-Assets ( prallen mit hüpfen kombinieren einstellen multiplizieren ).

Unten sehen Sie das Drehbuch für den Ball mit erklärenden Kommentaren. Der Ball muss einige grundlegende Ziele erreichen: Er sollte in einem komplizierten Muster abprallen, immer die Bewegung auf beiden Achsen beibehalten und er sollte mit einem herausfordernden, aber nicht unmöglichen Tempo in horizontaler Richtung beschleunigen.

BallHandler.cs

Als nächstes müssen wir unser Paddel skripten, das Sie unten sehen können. Das Paddel muss sich auf Tastendruck nach oben und unten bewegen (aber nicht außerhalb bestimmter Grenzen). Es muss auch das Partikelsystem auslösen, wenn es mit etwas kollidiert.

PaddleHandler.cs

Als nächstes brauchen wir die KI des Feindes: etwas, das dazu führt, dass das Paddel des Feindes mit einer festen Geschwindigkeit in Richtung des Balls läuft. Dafür verwenden wir Vector3.Slerp für maximale Einfachheit. Wir hätten auch gerne das gleiche Partikelverhalten, das wir auf unserem eigenen Paddel sehen.

EnemyAI.cs

Schließlich benötigen wir ein Skript, um die Anzeigetafel zu aktualisieren und den Ball zurückzusetzen, wenn er ins Aus geht.

ScoreboardUpdater.cs

Mit diesen angehängten Skripten und den ausgefüllten Referenzen erleben wir Gameplay, wenn wir unser Pong-Spiel ausführen!

Du kannst Lade meine Pong-Demo herunter , wenn Sie alles, was ich beschrieben habe, in Aktion sehen möchten. Es läuft auf Windows-, Mac- und Linux-Systemen.

8. Durchsuchen der Dokumentation / Weitere Informationen

Unity ist eine komplexe Engine mit viel mehr Funktionen, als in einem Handbuch dieses Stils behandelt werden könnten, und das ist, bevor Sie die große Menge (kostenloser und kommerzieller) Unity-Erweiterungen einbeziehen, die im Internet verfügbar sind. Dieser Leitfaden bietet Ihnen einen guten Ausgangspunkt für die Entwicklung eines Spiels, aber Selbsterziehung ist eine wichtige Fähigkeit bei jedem Unterfangen, und das ist hier doppelt so.

Eine entscheidende Ressource ist hier die Unity ScriptReferenz . Die ScriptReference ist eine durchsuchbare Datenbank, die sowohl für C# als auch für Javascript verfügbar ist und eine Liste aller Unity-Befehle und -Features mit Beschreibungen ihrer Funktionen und kurzen Syntaxbeispielen enthält.

Wenn Sie Probleme mit dem Editor und der Benutzeroberfläche von Unity haben oder einfach nur Video-Tutorials mögen, gibt es eine lange Liste von qualitativ hochwertigen Unity-Video-Tutorials erhältlich. Umfangreicher (aber weniger breit) Text-Tutorials für Unity sind auch von CatLikeCoding erhältlich.

Wenn Sie Fragen haben, die über den Umfang der Dokumentation oder Tutorials hinausgehen, können Sie spezifische Fragen stellen unter Antworten.Unity3d.com . Denken Sie daran, dass die Antworten von Freiwilligen bereitgestellt werden, respektieren Sie ihre Zeit und durchsuchen Sie zuerst die Datenbank, um sicherzustellen, dass Ihre Frage nicht bereits beantwortet wurde.

9. Erstellen Ihres Spiels / Kompilieren zu einer eigenständigen Anwendung

Wenn Sie etwas gebaut haben, auf das Sie stolz sind (oder unser etwas zwielichtiges Pong-Beispiel zum Üben geklont haben), ist es an der Zeit, Ihr Spiel aus dem Editor zu verschieben und es in etwas zu verwandeln, das Sie im Internet veröffentlichen und erzwingen können Ihre Freunde und Familie zu spielen. Dazu müssen Sie eine eigenständige Anwendung erstellen. Die gute Nachricht ist, dass dies in Unity sehr, sehr einfach ist. Es gibt jedoch ein paar potenzielle Schluckaufe, auf die Sie achten sollten.

Zunächst einmal sollten Sie wissen, dass Sie nur ein fehlerfreies Projekt erstellen können. Stellen Sie zu diesem Zweck sicher, dass die Konsole während des Builds geöffnet ist: Es gibt einige Fehlerbedingungen, die das Spiel im Editor ignoriert, aber dennoch einen Buildversuch abbricht. Dadurch werden nur Fehlermeldungen ohne sichtbare Ergebnisse auf dem Bildschirm an die Konsole ausgegeben, was frustrierend sein kann, wenn Sie die Überprüfung vergessen. Sobald Ihr Spiel jedoch fehlerfrei kompiliert wurde, können Sie auswählen Build-Einstellungen unter dem Datei Menü, oder drücken Sie Strg > Schicht

> B . Dadurch wird ein einfacher Dialog angezeigt, mit dem Sie Ihr Spiel für mehrere Plattformen erstellen können.

Der Vorgang von dort ist selbsterklärend: Wählen Sie Ihre Optionen und drücken Sie bauen ; Das Spiel fordert Sie auf, ein Verzeichnis für die Installation anzugeben, und legt dort sowohl die ausführbare Datei als auch das Datenverzeichnis ab. Diese beiden Dateien können zusammengezippt und verteilt werden (stellen Sie nur sicher, dass Sie keine Gebühren für ein in der Unity-Demo erstelltes Spiel berechnen, da dies gegen die Nutzungsbedingungen verstößt).

10. Schlusshinweise

Wie bei jedem Spieleentwicklungstool liegt der Schlüssel zum Erfolg bei Unity in der iterativen Entwicklung. Sie müssen in überschaubaren Schritten bauen – seien Sie auf jeden Fall ehrgeizig, aber seien Sie ehrgeizig in kleinen Stücken und ordnen Sie diese Stücke so an, dass Sie, selbst wenn Sie Ihren endgültigen Ehrgeiz verfehlen, zumindest mit einem zusammenhängenden enden werden Produkt.

Holen Sie sich die wichtigsten Elemente zuerst: Haben Sie eine Idee von Ihrem Minimum Viable Product , die einfachste, einfachste Sache, die Sie möglicherweise erschaffen können und trotzdem das Gefühl haben, etwas Wertvolles erreicht zu haben. Erreichen Sie dieses minimal tragfähige Projekt, bevor Sie zu größeren Ambitionen übergehen.

Dieses Tutorial bietet Ihnen einen guten Ausgangspunkt, aber der beste Weg, Unity zu lernen, besteht darin, ein Spiel zu erstellen. Beginnen Sie mit der Entwicklung eines Spiels, füllen Sie Wissenslücken, sobald sie auftauchen, und der allmähliche Wissensfluss wird die Dinge, die Sie nicht wissen, überraschend schnell untergraben.

Wenn Sie dies alles gelesen haben und von der für Unity erforderlichen Codierung etwas überfordert sind, lesen Sie unbedingt, wie es geht Spieleentwicklung lernen mit Unity Learn und lesen Sie auch unsere Anleitung zum Erstellen von Videospielen ohne Programmierung.

Unity ist ein leistungsstarkes Werkzeug, und mit ein wenig Erkundung können Sie damit schneller beeindruckende Projekte erstellen, als Sie vielleicht erwarten. Teilen Sie uns in den Kommentaren unten mit, was Sie gebaut haben - wir würden uns freuen!

Teilen Teilen Tweet Email 3 Möglichkeiten, um zu überprüfen, ob eine E-Mail echt oder gefälscht ist

Wenn Sie eine E-Mail erhalten haben, die etwas zweifelhaft aussieht, ist es immer am besten, die Echtheit zu überprüfen. Hier sind drei Möglichkeiten, um festzustellen, ob eine E-Mail echt ist.

Weiter lesen
Verwandte Themen
  • Programmierung
  • Programmierung
  • Lange Form
  • Langform-Führer
Über den Autor André Infante(131 veröffentlichte Artikel)

Als Schriftsteller und Journalist aus dem Südwesten ist Andre garantiert bis zu 50 Grad Celsius funktionstüchtig und bis zu einer Tiefe von zwölf Fuß wasserdicht.

Mehr von André Infante

Abonniere unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um sich zu abonnieren