Menu
CoddyTech

Velocità diagonale

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

Tieni premute insieme le frecce destra e su: gli assi grezzi forniscono la direzione (1, 0, 1). La sua lunghezza, .magnitude, è la radice quadrata di 1 + 1, circa 1,41. Un personaggio che si muove grazie a questo vettore percorre 1,41 unità in diagonale nello stesso tempo in cui ne percorre 1 andando dritto: il 41% più velocemente.

.normalized restituisce una copia di un vettore che punta nella stessa direzione ed è lunga esattamente 1 unità: (1, 0, 1) diventa circa (0,71, 0, 0,71) e (0, 0, 5) diventa (0, 0, 1). Moltiplicato per una velocità, fa muovere il vettore a quella velocità in qualsiasi direzione. Questa ape vola verso il fiore a 2 unità al secondo, sia che il fiore sia lontano sia che sia vicino; senza .normalized volerebbe più velocemente quanto più il fiore è lontano:

public Vector3 flower = new Vector3(4, 1, 3);
public float speed = 2f;

void Update()
{
    Vector3 toFlower = flower - transform.position;
    transform.position += toFlower.normalized * speed * Time.deltaTime;
}

Vector3.zero.normalized rimane (0, 0, 0), perché zero non ha una direzione. v.normalized lascia v com'era; v.Normalize() modifica v stesso.

challenge icon

Sfida

Facile

Fai in modo che il personaggio si muova in diagonale alla stessa velocità.

  1. In Update(), crea Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));.
  2. Aggiungi direction.normalized * speed * Time.deltaTime a transform.position.

Premi «Gioca» e tieni premute due frecce: il personaggio si muove in diagonale senza andare più veloce che in linea retta. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class Walker : MonoBehaviour
{
    public float speed = 4f;

    void Update()
    {
        // Frecce o WASD: muovi lungo x e z alla velocità speed, anche in diagonale.
    }
}

Tutte le lezioni di Fondamenti di scripting in Unity

Esercitati da solo: Playground Unity