Entwickeln

Deine erste VR-App erstellen

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.
  1. Installiere Unity und erstelle ein neues Projekt, indem du Unity für die VR-Entwicklung einrichtest.
  2. Schließe die Einrichtung des Headsets für die Entwicklung ab und befolge den Leitfaden.
  3. Konfiguriere die Build-Einstellungen.

Grundlegende Konzepte

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 ist ein Container, der verschiedene Spielobjekte enthält.
  • Game Objects 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 definieren das Verhalten des Spielobjekts. Die Komponente Transform 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 Farben zu Spielobjekten 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.
  1. Erstelle in der Ansicht Project im Ordner Assets einen neuen Ordner, der die Materialien für verschiedene Spielobjekte der App enthalten soll, benenne ihn in Materials um und doppelklicke auf den Ordner, um ihn zu öffnen.
  2. Gehe im Menü zu Assets > Create > Material und benenne das Material in floor-color um.
  3. Klicke in der Ansicht Inspector unter Main Maps 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).
    Unity Inspector showing Albedo color picker set to a dark blue color for the floor material.
  4. 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, ball-color bzw. after-collision um und lege die RGB-Werte auf (255,255,255), (240,240,0) bzw. (241,107,8) fest.
    Unity Project view with four materials: floor-color, wall-color, ball-color, and after-collision.

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:
  1. Gehe im Menü zu GameObject > 3D Object > Plane.
  2. Benenne es in der Ansicht Hierarchy in floor um.
  3. Überprüfe in der Ansicht Inspector unter Transform, ob die Position auf den Ausgangspunkt (0,0,0) festgelegt ist. Wenn nicht, lege sie auf (0,0,0) fest.
  4. Lege die Größe unter Transform 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.
  5. Verschiebe das Material floor-color per Drag-and-Drop auf die Ebene, um die Farbe hinzuzufügen.
    5. Drag and drop the *floor-color* material on the plane to illustration.
Spielball:
  1. Gehe im Menü zu GameObject > 3D Object > Sphere.
  2. Benenne es in der Ansicht Hierarchy in player-ball um.
  3. Verschiebe aus dem Ordner Materials das Material ball-color auf die Kugel.
  4. Vergewissere dich in der Ansicht Inspector unter Transform, 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).
    4. In the **Inspector** view, under **Transform**, ensure th illustration.
Vier Wände:
  1. Gehe im Menü zu GameObject > 3D Object > Cube.
  2. Verschiebe aus dem Ordner Materials das Material wall-color auf den Würfel.
  3. Setze in der Ansicht Inspector unter Transform 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.
  4. Klicke in der Ansicht Hierarchy mit der rechten Maustaste auf den Würfel und gehe wie folgt vor:
    a. Benenne den Würfel in first-wall um.
    b. Dupliziere den Würfel dreimal, um drei weitere Wände hinzuzufügen, und benenne sie in second-wall, third-wall bzw. fourth-wall um.
  5. Wähle in der Ansicht Hierarchythird-wall aus und lege in der Ansicht Inspector unter Transform die Rotation auf (0,90,0) fest. Wiederhole den Schritt für fourth-wall.
  6. Wähle in der Ansicht Hierarchyfirst-wall aus. Gib dann in der Ansicht Inspector unter Transform 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: (-10,0,0)
    second-wall: (10,0,0)
    third-wall: (0,0,10)
    fourth-wall: (0,0,-10)
    fourth-wall illustration

Schritt 3: Kamera und Beleuchtung anpassen

Passe die Hauptkamera und die Beleuchtung an, um die Szene besser überblicken zu können.
  1. Wähle in der Ansicht HierarchyMain Camera aus.
  2. Lege in der Ansicht Inspector unter Transform die Position auf (0,10,-20) und die Rotation auf (20,0,0) fest.
  3. Wähle in der Ansicht HierarchyDirectional Light aus.
  4. Lege in der Ansicht Inspector unter Transform die Rotation auf (50,60,0) fest.

Schritt 4: Bewegung zum Spielball hinzufügen

  1. Wähle in der Ansicht Hierarchyplayer-ball aus.
  2. Gehe in der Ansicht Inspector wie folgt vor:
    a. Klicke auf Add Component > Physics > Rigidbody.
    Unity Inspector showing the Rigidbody component added to the player-ball GameObject.
    b. Klicke auf Add Component > New Script, nenne es PlayerController und klicke auf Create and Add.
    c. Klicke auf das Zahnrad-Symbol neben dem Skript PlayerController und klicke auf Edit Script, um es im Code-Editor zu öffnen.
    Unity Inspector with the PlayerController script gear menu open and Edit Script highlighted.
    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);
    }
}
  1. Gib in der Ansicht Inspector im Skript PlayerController unter Speed den Wert für die Geschwindigkeit ein. Beispiel: 500. Diese Variable entspricht der Variable speed, die wir im Skript PlayerController in Schritt 4.2.d festgelegt haben.
    Unity Inspector showing the PlayerController script with the Speed field set to 500.
  2. 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

  1. Gehe im Menü zu Game Object > UI > Text.
  2. Wähle in der Ansicht HierarchyText aus und benenne die Option in message um.
  3. Wechsle vom Tab Scene zum Tab Game, um in der Vorschau zu sehen, wie der Text im Spiel angezeigt wird.
  4. Verändere in der Ansicht Inspector unter Rect Transform 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! 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... wird auf dem Bildschirm angezeigt.
  1. Wähle in der Ansicht Hierarchyfirst-wall aus.
  2. Klicke in der Ansicht Inspector auf Add Component > New Script, nenne es ColorController und klicke auf Create and Add.
  3. Klicke auf das Zahnrad-Symbol neben dem Skript ColorController und klicke auf Edit Script, um es im Code-Editor zu öffnen.
  4. 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...";
         }
     }
    }
    
  5. Wähle in der Ansicht Hierarchyfirst-wall aus.
  6. Gehe in der Ansicht Inspector im Skript ColorController wie folgt vor:
    a. Erweitere Wall Material. Gib unter Size 2 ein. Verschiebe in Element 0 und Element 1 per Drag-and-Drop after-collision bzw. wall-color.
    b. Klicke auf das Zahnrad-Symbol neben Display Text und wähle message aus. Display Text ist dasselbe Feld, das wir im ColorController.cs-Skript in Schritt 6.4 festgelegt haben.
    Unity Inspector showing the ColorController script with Wall Material and Display Text fields.
  7. Wähle in der Ansicht Hierarchysecond-wall aus.
  8. Klicke in der Ansicht Inspector auf Add Components > Scripts, wähle ColorController aus der Liste aus und wiederhole Schritt 6.
  9. Wiederhole Schritt 7 und Schritt 8 für die übrigen Wände.
  10. 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.
  1. Speichere deine Szene.
  2. Gehe zu File > Build and Run.
  3. Doppelklicke auf die Datei, um die App auf deinem Computer auszuführen. Verwende für Eingaben die Tastatur oder Unity-kompatible Joysticks.