Menu
CoddyTech

Un cambio de carril suave

Lección 2 de 20 del curso Juego de Unity: Carriles celestes de Coddy.

El corredor salta de un carril a otro en un solo fotograma. Funciona, pero parece que se teletransporta. Un cambio de carril debería llevar un momento, para que la vista pueda seguirlo.

Mathf.MoveTowards(current, target, maxStep) mueve un número hacia un objetivo como máximo maxStep, y nunca lo sobrepasa. Si se llama en cada fotograma con un paso igual a la velocidad multiplicada por Time.deltaTime, se mueve a esa velocidad en unidades por segundo, sea cual sea la frecuencia de fotogramas:

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

Con laneSpeed en 16, un cambio de carril de 2.5 unidades tarda unos 0.16 segundos: es rápido, pero puedes verlo.

challenge icon

Desafío

Fácil
  1. Añade public float laneSpeed = 16f; debajo de laneWidth.
  2. Reemplaza float x = targetX; por la línea Mathf.MoveTowards de arriba.
  3. Pulsa «Jugar» y cambia de carril.

Pruébalo tú mismo

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

Todas las lecciones de Juego de Unity: Carriles celestes

Practica por tu cuenta: Playground de Unity