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.
Sfida
Facile- Aggiungi
public float laneSpeed = 16f;sottolaneWidth. - Sostituisci
float x = targetX;con la rigaMathf.MoveTowardsqui sopra. - 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