Menu
CoddyTech

Verfolge den Spieler

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 50 von 63.

Ein Gegner, der den Spieler verfolgt, benötigt einen Rigidbody, damit Wände ihn aufhalten und er schieben und geschoben werden kann. Die Verfolgung selbst erfolgt über eine Geschwindigkeit, die auf den Spieler ausgerichtet und einmal pro Physikschritt festgelegt wird. Dieser Zombie läuft auf alles zu, was sich in seinem player-Slot befindet:

[SerializeField] private Transform player;
[SerializeField] private float speed = 2.5f;
private Rigidbody rb;

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

void FixedUpdate()
{
    Vector3 toPlayer = player.position - rb.position;
    toPlayer.y = 0f;
    Vector3 dir = toPlayer.normalized;
    rb.linearVelocity = new Vector3(dir.x * speed, rb.linearVelocity.y, dir.z * speed);
}

player.position - rb.position zeigt vom Zombie zum Spieler. Sein y-Wert wird auf 0 gesetzt, damit der Zombie auf ebener Höhe läuft, wenn der Spieler höher oder tiefer steht. Durch normalized erhält der Vektor die Länge 1, sodass der Zombie mit speed läuft, egal ob der Spieler 2 oder 20 Einheiten entfernt ist. Die neue Geschwindigkeit behält die alte y-Geschwindigkeit bei, sodass die Schwerkraft den Zombie weiterhin von einer Stufe herunterzieht. Bei seinem Rigidbody ist Freeze Rotation aktiviert, damit er beim Laufen nicht umkippt.

Eine festgelegte Geschwindigkeit lässt einen Läufer sofort loslaufen und abbiegen. Einen schweren Gegner kannst du stattdessen im selben FixedUpdate mit AddForce anschieben: Er nimmt Geschwindigkeit auf, behält seinen Schwung bei und schießt über das Ziel hinaus, wenn der Spieler zur Seite tritt. Vermeide es, den Transform eines Verfolgers zu bewegen: So kann er genauso leicht in einer Wand landen wie irgendwo anders, und die Physik-Engine kann ihn erst danach wieder hinausschieben.

challenge icon

Aufgabe

Mittel

Ein Felsbrocken rollt dem Spieler hinterher. Schreibe das Skript Boulder für den Felsbrocken, eine Kugel mit einem Rigidbody. Im Inspector weist du ihm player (den Player) und force (6) zu. Das Skript Player ist fertig: Mit den Pfeiltasten bewegst du den Spieler.

  • Schiebe den Felsbrocken bei jedem Physikschritt mit AddForce in Richtung des Spielers, und zwar mit einer Kraft von force, egal ob der Spieler nah oder weit entfernt ist.
  • Schiebe ihn nur über den Boden, ohne nach oben oder unten gerichteten Anteil, selbst wenn der Spieler auf der Kante steht.
  • Bewege seinen Transform nicht und friere seine Rotation nicht ein: Durch Reibung rollt er.

Drücke Play, laufe Kreise um den Felsbrocken und klicke dann auf Check.

Probier es selbst

using UnityEngine;

public class Boulder : MonoBehaviour
{
    [SerializeField] private Transform player;
    [SerializeField] private float force = 6f;
    private Rigidbody rb;

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

    void FixedUpdate()
    {
        // Schiebe den Felsbrocken am Boden entlang in Richtung des Spielers
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Physik und Gameplay