So codieren Sie einen physikbasierten Zeichencontroller in Unity3D

So codieren Sie einen physikbasierten Zeichencontroller in Unity3D

Ein Charakter-Controller kann Ihnen helfen, einfache Bewegungsphysik in Ihr Spiel zu implementieren.

Sie können sich Unity3D-Charaktercontrollern aus verschiedenen Blickwinkeln nähern. Wenn Sie eine Bibliothek mit leistungsstarken Klassen und Funktionen verwenden, kann das Erstellen einer physikbasierten Charaktersteuerung ein unterhaltsamer Ausgangspunkt für Ihre Spieleentwicklung sein.

Schritt 1: Erstellen Sie eine Szene mit Spieler- und Geländeobjekten

Unity Character Controller 3D-Raum

Sobald Unity geöffnet ist und Sie ein neues Projekt erstellt haben, können Sie beginnen, indem Sie Ihrer Szene ein paar Objekte hinzufügen. Sie können diese Objekte in beliebiger Reihenfolge erstellen, aber achten Sie darauf, dass Sie die richtigen Einstellungen verwenden. Obwohl es sich bei diesem Projekt um ein einfaches Projekt handelt, ist es eine großartige Möglichkeit, mit Unity zu beginnen.

Ein 3D-Ebenenobjekt für Gelände

Das erste Objekt, das Sie Ihrer Szene hinzufügen, ist ein Flugzeug. Klicken Sie mit der rechten Maustaste in den Hierarchiebereich, bewegen Sie den Mauszeiger über 3D-Objekt und wählen Sie Ebene aus der Liste aus. Sie können die Größe des Flugzeugs anpassen, um einen größeren Testbereich bereitzustellen, aber Sie müssen nichts weiter daran ändern.

Ein Cube-Object-Player-Modell

Als nächstes ist es an der Zeit, der Szene einen Würfel hinzuzufügen, der als Spielermodell fungiert. Klicken Sie mit der rechten Maustaste in den Hierarchiebereich, bewegen Sie den Mauszeiger über 3D-Objekt und wählen Sie Cube aus dem Dropdown-Menü aus. Positionieren Sie den neuen Würfel so, dass er sich über der Ebene befindet, die Sie ebenfalls hinzugefügt haben. Sie müssen auch eine Starrkörperkomponente hinzufügen, um den Würfel in ein Physikobjekt zu verwandeln.

Wählen Sie den Würfel aus und gehen Sie zum Inspektor. Klicken Sie unten im Bereich auf Komponente hinzufügen, suchen Sie nach Rigidbody und wählen Sie Rigidbody aus der angezeigten Liste aus. Aktivieren Sie das Kontrollkästchen Schwerkraft verwenden und lassen Sie die restlichen Einstellungen unverändert.

Sie können online kostenlose Unity-Assets finden, um Ihr Projekt aufzupeppen.

Eine Third-Person-Kamera

Ihre Szene sollte bereits über eine Kamera verfügen, die Sie als Third-Person-Kamera verwenden können. Positionieren Sie die Kamera so, dass sie in einer bequemen Third-Person-Position über Ihrem Cube sitzt. Wechseln Sie zum Hierarchiebereich, bevor Sie die Kamera per Drag & Drop auf den Würfel ziehen, um eine Eltern-Kind-Beziehung zu erstellen. Die Kamera folgt dabei automatisch Ihrem Würfel.

Ein Schnelltest

Während Ihre Szene noch keinen Code hat, können Sie Ihre bisherige Arbeit testen. Klicken Sie oben auf dem Bildschirm auf die Schaltfläche Spielen , um Ihr Spiel zu laden. Sie sollten sehen, wie der Würfel fällt und auf dem Flugzeug landet, und die Kamera sollte dem Würfel folgen, während er fällt.

Schritt 2: Richten Sie eine C#-Datei ein

Jetzt ist es an der Zeit, eine C#-Datei zu erstellen, damit Sie mit der Programmierung von Bewegungen beginnen können. Gehen Sie zum Abschnitt Projekt, klicken Sie mit der rechten Maustaste, bewegen Sie den Mauszeiger über Erstellen und wählen Sie Ordner aus der Liste aus. Benennen Sie den Ordner Skripte oder etwas Ähnliches.

Navigieren Sie in Ihrem neuen Ordner und wiederholen Sie den Vorgang, aber wählen Sie C#-Skript aus der Liste aus. Sie können dieser Datei einen beliebigen Namen geben, aber dies ist auch der Name der darin enthaltenen Hauptfunktion. Stellen Sie sicher, dass Ihr neues C# so aussieht.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Character_Control: MonoBehaviour {
    void Start() {
    }


    void Update() {
    }
}

Schritt 3: Verwenden Sie C#, um Vorwärts- und Rückwärtsbewegungen mit Geschwindigkeit zu erstellen

Bevor Sie die Funktionen in Ihrer Skriptdatei hinzufügen, deklarieren Sie einige öffentliche Variablen. An erster Stelle steht ein Rigidbody, um das Spielermodell zu speichern. Deklarieren Sie auch einen Schwimmer, um die Bewegungsgeschwindigkeit im Auge zu behalten. Diese Variablen gehören in die Hauptklasse, außerhalb von Funktionen.

public Rigidbody rigidbody;
public float speed;

Als Nächstes ist es an der Zeit, der Start-Funktion eine einzelne Codezeile hinzuzufügen. Dies verwendet eine GetComponent-Deklaration, um die Rigidbody-Komponente des Würfels der von Ihnen erstellten Rigidbody-Variablen zuzuweisen.

void Start() {
    rigidbody = GetComponent < Rigidbody > ();
}

Jetzt können Sie Code hinzufügen, der Ihr Player-Modell in Bewegung versetzt. Dieser Code ist schön und einfach; Sie brauchen nur zwei if-Anweisungen, eine für die Vorwärtsbewegung und eine für die Rückwärtsbewegung. Sie können Input.GetKey verwenden, um festzustellen, wann eine Taste gedrückt wird. In diesem Fall suchen Sie nach Drücken der Tasten W und S.

Durch Drücken einer dieser Tasten wird dem Würfel-Starrkörper mithilfe von rigidbody.AddForce eine Kraft hinzugefügt. Sie können die Richtung und Geschwindigkeit der hinzugefügten Kraft berechnen, indem Sie ihre Position auf der Z-Achse (transform.forward) mit der Geschwindigkeitsvariablen multiplizieren. Es gibt keine transform.backward-Klasse, die Sie für die Rückwärtsbewegung verwenden können, aber dies kann erreicht werden, indem Sie transform.forward mit -1 multiplizieren.

if (Input.GetKey("w")) {
    rigidbody.AddForce(transform.forward * speed);
}

if (Input.GetKey("s")) {
    rigidbody.AddForce((transform.forward * -1) * speed);
}

Speichern Sie die C#-Datei und navigieren Sie zurück zu Unity. Suchen Sie das Skript im Projektfenster und ziehen Sie es per Drag-and-Drop auf den Charaktermodell-Würfel innerhalb der Hierarchie, um das Skript diesem Objekt zuzuweisen. Wenn Sie den Cube auswählen, sollten Sie das Skript als Komponente im Inspector-Bereich sehen. Klicken Sie in das Variablenfeld Starrkörper und wählen Sie den Starrkörper Ihres Würfels aus.

Sie können jetzt die Play-Schaltfläche verwenden, um das Spiel zu starten und Ihren Code zu testen. Aber warte! Es gibt ein Problem; Ihr Würfel wird rollen, anstatt sich geradeaus zu bewegen. Gehen Sie zurück zum Inspektor des Würfels, suchen Sie die Rigidbody-Komponente und markieren Sie die Kästchen, um Rotation auf der X- und Z-Achse einzufrieren, bevor Sie das Spiel erneut starten. Jetzt sollte es funktionieren.

Schritt 4: Verwenden Sie C#, um Links- und Rechtsdrehungen mit Drehmoment zu erstellen

Im Gegensatz zur Vorwärts- und Rückwärtsbewegung erfordert das Drehen Ihres Cube-Player-Modells eine Kraft, die als Drehmoment bezeichnet wird. Dazu benötigen Sie eine weitere Variable: einen öffentlichen Float, um einen Drehmomentwert zuzuweisen.

public float torque;

Der Code zum Links- und Rechtsdrehen in diesem Skript ist sehr ähnlich dem, der auch zum Vorwärts- und Rückwärtsfahren verwendet wird. Es gibt eine if – Anweisung für jede Richtung, die nach Drücken der D-Taste (Rechtsdrehung) oder der A-Taste (Linksdrehung) sucht.

Der erste Schritt in jeder if-Anweisung besteht darin, die Richtung der Wende mithilfe der Input.GetAxis-Methode zu bestimmen und das Ergebnis einer Float-Variablen zuzuweisen. Verwenden Sie anschließend rigidbody.AddTorque, um eine Rotationskraft auf das Cube-Charaktermodell anzuwenden, indem Sie das Drehmoment, die Drehung und die Z-Achse des Würfels multiplizieren.

if (Input.GetKey("d")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

if (Input.GetKey("a")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

Speichern Sie Ihren Code und gehen Sie zurück zu Unity, um ihn zu testen. Sie können die Geschwindigkeit und die Hochlaufzeit der Drehung Ihres Spielermodells anpassen, indem Sie den Würfel auswählen und die Massen-, Widerstands- und Drehmomentvariablen des Starrkörpers in Ihrem Skript bearbeiten. Dieses Beispielprojekt setzt auf 1 Masse, 1 Widerstand und 2 Drehmoment.

Schritt 5: Verwenden Sie C#, um Jumping zu programmieren

Als letztes Element dieses Unity-Charaktercontrollers ist es an der Zeit, Ihren Sprung zu erstellen. Das Erstellen eines Sprungs ist komplexer als die anderen grundlegenden Steuerelemente, an denen Sie gearbeitet haben, da ein Sprung eine begrenzte Höhe haben muss. Beginnen Sie damit, eine private boolesche Variable hinzuzufügen, um zu verfolgen, ob der Spieler springt oder nicht.

private bool isJumping = false;

Diese Variable macht nichts ohne eine Anweisung, sie zu testen. In diesem Fall reicht eine einfache if-Anweisung aus, um zu prüfen, ob die Variable falsch ist. Das Hinzufügen derselben Bedingung zu den anderen Bewegungs-If-Anweisungen hindert den Spieler daran, sich während Sprüngen zu bewegen.

if (!isJumping) {
}

Das Hinzufügen derselben Bedingung zu den anderen Bewegungs-If-Anweisungen hindert den Spieler daran, sich während Sprüngen zu bewegen.

if (Input.GetKey("w") &&! isJumping) {
    rigidbody.AddForce(transform.forward * speed);
}

Innerhalb der! isJumping if-Anweisung benötigen Sie eine weitere if-Anweisung, diesmal um zu prüfen, ob die Sprungtaste gedrückt wurde. Das erste, was Sie in dieser if-Anweisung tun müssen, ist die isJumping-Variable auf true zu setzen, gefolgt von einer rigidbody.angularVelocity-Deklaration, um die aktuell auf den Würfel ausgeübten Kräfte zu entfernen.

Jetzt können Sie die Deklaration rigidbody.AddForce verwenden, um dem Würfel auf seiner Z-Achse Kraft hinzuzufügen und so die Aufwärtsbewegung eines Sprungs zu erzeugen. Schließlich ist es an der Zeit, eine Invoke-Deklaration zu verwenden, um nach 0,8 Sekunden eine andere Funktion aufzurufen.

if (!isJumping) {
    if (Input.GetKeyDown("space")) {
        isJumping = true;
        rigidbody.AddForce(transform.up * speed * 120);
        rigidbody.angularVelocity = Vector3.zero;
        Invoke("Move_Setter", 0.8 f);
    }
}

Diese Funktion setzt die isJumping-Variable wieder auf false, sodass Bewegung/Springen wieder möglich ist, und die 0,8-Sekunden-Verzögerung verhindert, dass sie zu früh ausgelöst wird.

void Move_Setter() {
    isJumping = false;
}

Schritt 6: Testen Sie Ihren Charakter-Controller-Code

Speichern Sie Ihre Datei und gehen Sie zurück zu Unity, um den von Ihnen geschriebenen Code zu testen. Wie die meisten Compiler stellt Unity Informationen zu Fehlern und anderen Problemen mit Ihrem Code bereit, damit Sie leichter erkennen können, was Sie möglicherweise ändern müssen. Sie können den vollständigen Code für dieses Projekt auf unserer GitHub-Seite anzeigen.

Erstellen von Unity-Zeichencontrollern

Beim Erstellen eines Charaktercontrollers in Unity können Sie aus einer Vielzahl unterschiedlicher Ansätze wählen. Die Verwendung von Physik ist eine Option, aber Sie können auch das integrierte Charaktersteuerungssystem verwenden, wenn Sie möchten.

Das Erkunden verschiedener Optionen wie dieser ist eine großartige Möglichkeit, sich mit Tools wie Unity vertraut zu machen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert