Menu
CoddyTech

Un cambio di corsia fluido

Lezione 2 di 20 del corso Gioco Unity: Corsie nel cielo di Coddy.

Il corridore salta da una corsia all'altra in un solo fotogramma. Funziona, ma sembra un teletrasporto. Il cambio di corsia dovrebbe richiedere un po' di tempo, così l'occhio può seguirlo.

Mathf.MoveTowards(current, target, maxStep) sposta un numero verso un obiettivo di un valore massimo pari a maxStep, senza mai oltrepassarlo. Chiamata a ogni fotogramma con un passo pari alla velocità moltiplicata per Time.deltaTime, si sposta a quella velocità in unità al secondo, indipendentemente dalla frequenza dei fotogrammi:

float x = Mathf.MoveTowards(transform.position.x, targetX, laneSpeed * Time.deltaTime);

Con laneSpeed impostato a 16, un cambio di corsia di 2.5 unità richiede circa 0.16 secondi: abbastanza rapido, ma si riesce a vederlo.

challenge icon

Sfida

Facile
  1. Aggiungi public float laneSpeed = 16f; sotto laneWidth.
  2. Sostituisci float x = targetX; con la riga Mathf.MoveTowards qui sopra.
  3. Premi «Gioca» e cambia corsia.

Provalo tu

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;

    public int lane;

    private CharacterController controller;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) lane = Mathf.Max(-1, lane - 1);
        if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) lane = Mathf.Min(1, lane + 1);

        float targetX = lane * laneWidth;
        float x = targetX;
        Vector3 move = new Vector3(x - transform.position.x, 0f, 0f);
        controller.Move(move);
    }
}

Tutte le lezioni di Gioco Unity: Corsie nel cielo

Esercitati da solo: Playground Unity