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.
Desafío
Fácil- Añade
public float laneSpeed = 16f;debajo delaneWidth. - Reemplaza
float x = targetX;por la líneaMathf.MoveTowardsde arriba. - 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