Dieses Tutorial unterstützt dich bei der Erstellung deiner ersten VR-App in Unity. Es handelt sich dabei um eine einfache App, die grundlegende Unity-Konzepte wie 3D-Objekte, Komponenten und Entwicklungseinstellungen vorstellt. Das Oculus Integration-Paket wird nicht verwendet, da du in diesem Tutorial die grundlegenden Konzepte und die Schnittstelle von Unity kennenlernen sollst. Am Ende erhältst du eine VR-App, die du auf deinem Computer ausführen kannst.
Worum geht es in der App?
Es handelt sich um ein einfaches Spiel! Die Szene umfasst einen Spielbereich, der von vier Wänden umgeben ist, und einen Ball, der als Spielfigur fungiert. Das Ziel des Spiels ist, dass der Ball immer weiterrollt, ohne gegen die Wände zu stoßen. Wenn er gegen eine Wand stößt, sollen sich die Farbe der Wand ändern und auf dem Bildschirm ein Text eingeblendet werden, der auf die Kollision hinweist. Für Eingaben benötigst du eine Tastatur oder Unity-kompatible Joysticks.
Folgendes werden wir erstellen:
Video: Demo des Ballverhaltens und der Kollision mit einer Wand
Voraussetzungen
Bevor du mit diesem Tutorial beginnst, solltest du dich vergewissern, dass du deine Entwicklungsumgebung eingerichtet und die notwendigen Einstellungen vorgenommen hast.
In diesem Abschnitt werden die Grundlagen der Erstellung von Apps und Spielmechanik vorgestellt. Wir haben die Erklärungen auf grundlegende Abläufe beschränkt, die für die Entwicklung dieser VR-App hilfreich sind. Detaillierte Informationen zu den Konzepten und Abläufen in Unity findest du im Unity-Benutzungshandbuch.
Scene (Szene) ist ein Container, der verschiedene Spielobjekte enthält.
Game Objects (Spielobjekte) sind grundlegende Objekte, die für Figuren, Requisiten, Beleuchtung, Kamera oder Spezialeffekte stehen. In dieser App verwenden wir 3D-Objekte, die aus einfachen Formen wie Ebenen, Würfeln und Kugeln bestehen.
Components (Komponenten) definieren das Verhalten des Spielobjekts. Die Komponente Transform (Transformieren) bestimmt in erster Linie Position, Rotation und Dimension jedes Spielobjekts. Die Werte werden als X-, Y- und Z-Koordinaten für jede Eigenschaft angegeben. Die Position ist standardmäßig auf (0,0,0) festgelegt, auch Ausgangspunkt genannt, von dem aus alle Berechnungen von Koordinaten in der Szene stattfinden.
Material fügt Textur und Farbe zu Objekten hinzu. In dieser App beschränken wir die Nutzung von Materialien auf die Farbe von Objekten. Andere technische Details werden nicht behandelt.
App entwickeln
Schritt 1. Material erstellen, um Spielobjekten Farben hinzuzufügen
Eine grundlegende Anforderung bei der App-Entwicklung ist das Hinzufügen von Farben und Texturen. Mit Materialien kannst du verschiedene Effekte wie Farben, Shader, Texturen und mehr definieren. In dieser App beschränken wir die Nutzung von Materialien auf das Hinzufügen von Farben.
Erstelle in der Ansicht Project (Projekt) im Ordner Assets einen neuen Ordner, der die Materialien für verschiedene Spielobjekte der App enthalten soll, benenne ihn in Materials (Materialien) um und doppelklicke auf den Ordner, um ihn zu öffnen.
Gehe im Menü zu Assets > Create (Erstellen) > Material und benenne das Material in floor-color (Bodenfarbe) um.
Klicke in der Ansicht Inspector (Prüfung) unter Main Maps (Hauptzuordnungen) auf das Albedo-Farbfeld, um eine Farbauswahl zu öffnen und die gewünschte Farbe auszuwählen. In dieser App verwenden wir RGB-Werte (3,32,70).
Wiederhole Schritt 2 bis 4, um Materialien für Wände, den Spielball und die geänderte Wandfarbe bei einer Kollision zu erstellen. Benenne sie in wall-color (Wandfarbe), ball-color (Ballfarbe) bzw. after-collision (nach Kollision) um und lege die RGB-Werte auf (255,255,255), (240,240,0) bzw. (241,107,8) fest.
Schritt 2. Boden, Spielball und vier Wände erstellen
Die Spielobjekte dieser App sind der Boden, der Ball und vier Wände. Um sie zu erstellen, verwenden wir die in Unity verfügbare Ebene, die Kugel und die Würfel.
Boden:
Gehe im Menü zu GameObject (Spielobjekt) > 3D Object (3D-Objekt) > Plane (Ebene).
Benenne es in der Ansicht Hierarchy (Hierarchie) in floor (Boden) um.
Überprüfe in der Ansicht Inspector (Prüfung) unter Transform (Transformieren), ob die Position auf den Ausgangspunkt (0,0,0) festgelegt ist. Wenn nicht, lege sie auf (0,0,0) fest.
Lege die Größe unter Transform (Transformieren) auf (2,1,2) fest, um den Boden zu vergrößern. Das Ebenenobjekt ist flach und hat kein Volumen. Deshalb ist der Y-Wert standardmäßig auf 1 festgelegt.
Verschiebe das Material floor-color (Bodenfarbe) per Drag-and-Drop auf die Ebene, um die Farbe hinzuzufügen.
Spielball:
Gehe im Menü zu GameObject (Spielobjekt) > 3D Object (3D-Objekt) > Sphere (Kugel).
Benenne es in der Ansicht Hierarchy (Hierarchie) in player-ball (Spielball) um.
Verschiebe aus dem Ordner Materials (Materialien) das Material ball-color (Ballfarbe) auf die Kugel.
Vergewissere dich in der Ansicht Inspector (Prüfung) unter Transform (Transformieren), dass die Position auf (0,0,0) festgelegt ist, und lege den Y-Wert auf 0,5 fest, damit der Ball auf dem Boden liegt, also (0,0.5,0).
Vier Wände:
Gehe im Menü zu GameObject (Spielobjekt) > 3D Object (3D-Objekt) > Cube (Würfel).
Verschiebe aus dem Ordner Materials (Materialien) das Material wall-color (Wandfarbe) auf den Würfel.
Setze in der Ansicht Inspector (Prüfung) unter Transform (Transformieren) die Position auf (0,0,0) zurück und lege die Größe auf (0,5,2,20,5) fest, damit die Wand gestreckt wird und genau zur Größe des Bodens passt.
Klicke in der Ansicht Hierarchy (Hierarchie) mit der rechten Maustaste auf den Würfel und gehe wie folgt vor:
a. Benenne den Würfel in first-wall (erste Wand) um.
b. Dupliziere den Würfel dreimal, um drei weitere Wände hinzuzufügen, und benenne sie in second-wall (zweite Wand), third-wall (dritte Wand) bzw. fourth-wall (vierte Wand) um.
Wähle in der Ansicht Hierarchy (Hierarchie) third-wall (dritte Wand) aus und lege in der Ansicht Inspector (Prüfung) unter Transform (Transformieren) die Rotation auf (0,90,0) fest. Wiederhole den Schritt für fourth-wall (vierte Wand).
Wähle in der Ansicht Hierarchy (Hierarchie) first-wall (erste Wand) aus. Gib dann in der Ansicht Inspector (Prüfung) unter Transform (Transformieren) folgende Werte ein, um die Wand so zu positionieren, dass sie den Boden von allen Seiten umschließt. Wiederhole diesen Schritt für die übrigen Wände.
first-wall (erste Wand): (-10,0,0)
second-wall (zweite Wand): (10,0,0)
third-wall (dritte Wand): (0,0,10)
fourth-wall (vierte Wand): (0,0,-10)
Schritt 3: Kamera und Beleuchtung anpassen
Passe die Hauptkamera und die Beleuchtung an, um die Szene besser überblicken zu können.
Wähle in der Ansicht Hierarchy (Hierarchie) Main Camera (Hauptkamera) aus.
Lege in der Ansicht Inspector (Prüfung) unter Transform (Transformieren) die Position auf (0,10,-20) und die Rotation auf (20,0,0) fest.
Wähle in der Ansicht Hierarchy (Hierarchie) Directional Light (Richtungslicht) aus.
Lege in der Ansicht Inspector (Prüfung) unter Transform (Transformieren) die Rotation auf (50,60,0) fest.
Schritt 4: Bewegung zum Spielball hinzufügen
Wähle in der Ansicht Hierarchy (Hierarchie) player-ball (Spielball) aus.
Gehe in der Ansicht Inspector (Prüfung) wie folgt vor:
a. Klicke auf Add Component (Komponente hinzufügen) > Physics (Eigenschaft) > Rigidbody (Starrkörper).
b. Klicke auf Add Component (Komponente hinzufügen) > New Script (Neues Skript), nenne es PlayerController (Spiel-Controller) und klicke auf Create and Add (Erstellen und hinzufügen).
c. Klicke auf das Zahnrad-Symbol neben dem Skript PlayerController (Spiel-Controller) und klicke auf Edit Script (Skript bearbeiten), um es im Code-Editor zu öffnen.
d. Ersetze den Beispiel-Code durch folgenden Wert, um Tastatureingaben zuzulassen und den Ball in Bewegung zu versetzen.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Appears in the Inspector view from where you can set the speed
public float speed;
// Rigidbody variable to hold the player ball's rigidbody instance
private Rigidbody rb;
// Called before the first frame update
void Start()
{
// Assigns the player ball's rigidbody instance to the variable
rb = GetComponent<Rigidbody>();
}
// Called once per frame
private void Update()
{
// The float variables, moveHorizontal and moveVertical, holds the value of the virtual axes, X and Z.
// It records input from the keyboard.
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
// Vector3 variable, movement, holds 3D positions of the player ball in form of X, Y, and Z axes in the space.
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
// Adds force to the player ball to move around.
rb.AddForce(movement * speed * Time.deltaTime);
}
}
Gib in der Ansicht Inspector (Prüfung) im Skript PlayerController (Spiel-Controller) unter Speed (Geschwindigkeit) den Wert für die Geschwindigkeit ein. Beispiel: 500. Diese Variable entspricht der Variable speed (Geschwindigkeit), die wir im Skript PlayerController (Spiel-Controller) in Schritt 4.2.d festgelegt haben.
Klicke oben in deiner App auf den Button zum Abspielen, um eine Vorschau der App anzuzeigen. Drücke auf der Tastatur die Pfeiltasten, um den Ball zu steuern.
Schritt 5. Text hinzufügen
Gehe im Menü zu Game Object (Spielobjekt) > UI (Bedienoberfläche) > Text.
Wähle in der Ansicht Hierarchy (Hierarchie) Text aus und benenne die Option in message (Nachricht) um.
Wechsle vom Tab Scene (Szene) zum Tab Game (Spiel), um in der Vorschau zu sehen, wie der Text im Spiel angezeigt wird.
Verändere in der Ansicht Inspector (Prüfung) unter Rect Transform (Rechteck transformieren) die Position des Textes. Bei Bedarf kannst du auch die Schriftfarbe und -größe ändern.
Schritt 6. Bei Kollision oder Fortsetzen des Spiels Wandfarbe ändern und Text einblenden
Kollision bedeutet, dass der Ball gegen die Wand stößt. Um die Kollision zu verdeutlichen, kannst du Effekte hinzufügen. Beispielsweise kannst du festlegen, dass sich die Wandfarbe ändert und der Text Ouch! (Aua!) auf dem Bildschirm eingeblendet wird, wann der Ball gegen die Wand stößt. Wenn der Ball hingegen weiterrollt, nimmt die Wand wieder ihre ursprüngliche Farbe an und der Text Keep Rolling... (Weiter geht's ...) wird auf dem Bildschirm angezeigt.
Wähle in der Ansicht Hierarchy (Hierarchie) first-wall (erste Wand) aus.
Klicke in der Ansicht Inspector (Prüfung) auf Add Component (Komponente hinzufügen) > New Script (Neues Skript), nenne es ColorController (Farb-Controller) und klicke auf Create and Add (Erstellen und hinzufügen).
Klicke auf das Zahnrad-Symbol neben dem Skript ColorController (Farb-Controller) und klicke auf Edit Script (Skript bearbeiten), um es im Code-Editor zu öffnen.
Ersetze den Beispiel-Code durch folgenden Code.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ColorController : MonoBehaviour
{
public Material[] wallMaterial;
Renderer rend;
// Appears in the Inspector view from where you can assign the textbox
public Text displayText;
// Start is called before the first frame update
void Start()
{
// Assigns the component's renderer instance
rend = GetComponent<Renderer>();
rend.enabled = true;
displayText.text = "";
}
// Called when the ball collides with the wall
private void OnCollisionEnter(Collision col)
{
// Checks if the player ball has collided with the wall.
if (col.gameObject.name == "player-ball")
{
displayText.text = "Ouch!";
rend.sharedMaterial = wallMaterial[0];
}
}
// It is called when the ball moves away from the wall
private void OnCollisionExit(Collision col)
{
if (col.gameObject.name == "player-ball")
{
rend.sharedMaterial = wallMaterial[1];
displayText.text = "Keep Rolling...";
}
}
}
Wähle in der Ansicht Hierarchy (Hierarchie) first-wall (erste Wand) aus.
Gehe in der Ansicht Inspector (Prüfung) im Skript ColorController (Farb-Controller) wie folgt vor:
a. Erweitere Wall Material (Wandmaterial). Gib unter Size (Größe) 2 ein. Verschiebe in Element 0 und Element 1 per Drag-and-Drop after-collision (nach Kollision) bzw. wall-color (Wandfarbe).
b. Klicke auf das Zahnrad-Symbol neben Display Text (Text anzeigen) und wähle message (Nachricht) aus. Display Text (Text anzeigen) ist dasselbe Feld, das wir im ColorController.cs-Skript in Schritt 6.4 festgelegt haben.
Wähle in der Ansicht Hierarchy (Hierarchie) second-wall (zweite Wand) aus.
Klicke in der Ansicht Inspector (Prüfung) auf Add Components (Komponenten hinzufügen) > Scripts (Skripte), wähle ColorController (Farb-Controller) aus der Liste aus und wiederhole Schritt 6.
Wiederhole Schritt 7 und Schritt 8 für die übrigen Wände.
Klicke oben in deiner App auf den Button zum Abspielen, um eine Vorschau der App anzuzeigen. Drücke auf der Tastatur die Pfeiltasten, um den Ball zu steuern.
Schritt 7. App erstellen und ausführen
Je nach Zielplattform, die du in den Build-Einstellungen ausgewählt hast, erstellt Unity entweder eine APK-Datei für Android oder eine EXE-Datei für Windows. Da wir das Oculus Integration-Paket nicht verwendet haben, funktioniert die App möglicherweise nicht mit Meta Quest-Controllern.
Speichere deine Szene.
Gehe zu File (Datei) > Build and Run (Erstellen und ausführen).
Doppelklicke auf die Datei, um die App auf deinem Computer auszuführen. Verwende für Eingaben die Tastatur oder Unity-kompatible Joysticks.