Menu
CoddyTech

Distanza tra gli oggetti

Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 28 di 85.

Vector3.Distance(a, b) indica quanto sono distanti due punti, in unità, misurati in linea retta lungo tutti e tre gli assi. È la lunghezza del segmento tra loro, (a - b).magnitude, quindi l'ordine di a e b non è importante. Da (0, 0, 0) a (3, 0, 4) è 5.

Confronta una distanza con un numero e uno script saprà quando qualcosa è vicino. Questo campeggiatore può scaldarsi le mani solo entro 4 unità dal falò, la cui posizione viene impostata dall'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");
    }
}

La distanza considera anche l'altezza: un campeggiatore a 5 unità sopra il fuoco si trova a 5 unità di distanza, non a 0. Quando l'altezza non deve essere considerata, confronta due punti con lo stesso valore di y.

challenge icon

Sfida

Facile

Rallenta il camminatore alla metà della velocità nella palude.

  1. Sotto float s = speed;, scrivi if (Vector3.Distance(transform.position, swamp) < 3f).
  2. Al suo interno, imposta s = speed / 2;. Lascia invariati il campo speed e le righe di movimento.

Premi «Gioca» e attraversa la palude camminando: il camminatore rallenta al suo interno. Poi premi «Verifica».

Provalo tu

using UnityEngine;

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

    void Update()
    {
        float s = speed;
        // Entro 3 unità dalla palude, muoviti a metà velocità.

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

Tutte le lezioni di Fondamenti di scripting in Unity

Esercitati da solo: Playground Unity