Menu
CoddyTech

Odległość między obiektami

Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 28 z 85.

Vector3.Distance(a, b) określa odległość między dwoma punktami w jednostkach, mierzoną po linii prostej we wszystkich trzech osiach. To długość kroku między nimi, (a - b).magnitude, więc kolejność a i b nie ma znaczenia. Od punktu (0, 0, 0) do (3, 0, 4) wynosi 5.

Porównaj odległość z liczbą, a skrypt będzie wiedział, kiedy coś jest blisko. Ten obozowicz może ogrzać sobie ręce tylko w odległości do 4 jednostek od ogniska, którego położenie ustawia Inspector:

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");
    }
}

Odległość uwzględnia też wysokość: obozowicz znajdujący się 5 jednostek nad ogniem jest od niego oddalony o 5 jednostek, a nie o 0. Jeśli wysokość nie powinna mieć znaczenia, porównaj dwa punkty o tej samej współrzędnej y.

challenge icon

Wyzwanie

Łatwy

Zwolnij wędrowca do połowy prędkości na bagnie.

  1. Pod float s = speed; napisz if (Vector3.Distance(transform.position, swamp) < 3f).
  2. Wewnątrz niego ustaw s = speed / 2;. Pozostaw pole speed i linie ruchu bez zmian.

Naciśnij „Graj” i przejdź prosto przez bagno: wędrowiec zwalnia na jego obszarze. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

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

    void Update()
    {
        float s = speed;
        // W odległości do 3 jednostek od bagna poruszaj się z połową prędkości.

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

Wszystkie lekcje w sekcji Podstawy skryptów w Unity

Poćwicz samodzielnie: Edytor online Unity