Menu
CoddyTech

Abstand zwischen Objekten

Teil des Abschnitts Unity-Scripting: Grundlagen der Unity-Journey von Coddy. Lektion 28 von 85.

Vector3.Distance(a, b) gibt an, wie weit zwei Punkte voneinander entfernt sind, gemessen in Einheiten auf einer geraden Linie durch alle drei Achsen. Das ist die Länge der Strecke zwischen ihnen, (a - b).magnitude, daher spielt die Reihenfolge von a und b keine Rolle. Von (0, 0, 0) bis (3, 0, 4) beträgt sie 5.

Vergleicht man eine Entfernung mit einer Zahl, weiß ein Skript, wann sich etwas in der Nähe befindet. Dieser Camper kann sich nur innerhalb von 4 Einheiten vom Lagerfeuer die Hände wärmen, dessen Position im Inspector festgelegt wird:

public Vector3 campfire = new Vector3(3, 0, 4);

void Update()
{
    float d = Vector3.Distance(transform.position, campfire);
    if (d < 4f && Input.GetKeyDown(KeyCode.Space))
    {
        Debug.Log("You warm your hands");
    }
}

Die Entfernung berücksichtigt auch die Höhe: Ein Camper, der sich 5 Einheiten über dem Feuer befindet, ist 5 Einheiten davon entfernt, nicht 0. Wenn die Höhe keine Rolle spielen soll, vergleiche zwei Punkte mit demselben y-Wert.

challenge icon

Aufgabe

Einfach

Verringere die Geschwindigkeit des Läufers im Sumpf auf die Hälfte.

  1. Schreibe unter float s = speed; if (Vector3.Distance(transform.position, swamp) < 3f).
  2. Setze darin s = speed / 2;. Lass das Feld speed und die Bewegungszeilen unverändert.

Drücke „Spielen“ und gehe direkt durch den Sumpf: Der Läufer wird darin langsamer. Drücke dann „Prüfen“.

Probier es selbst

using UnityEngine;

public class Walker : MonoBehaviour
{
    public float speed = 4f;
    public Vector3 swamp = new Vector3(0, 0.5f, 0);

    void Update()
    {
        float s = speed;
        // Bewege dich innerhalb von 3 Einheiten um den Sumpf mit halber Geschwindigkeit.

        Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
        transform.position += direction.normalized * s * Time.deltaTime;
    }
}

Alle Lektionen in Unity-Scripting: Grundlagen

Übe selbstständig: Unity-Playground