1. Prepara la escena
- Añade un Rigidbody2D (una Gravity Scale de 3 a 4 da respuesta ágil) y un collider al jugador.
- Añade un hijo vacío en los pies llamado GroundCheck.
- Pon los colliders del suelo en una capa Ground.
2. El controlador
using UnityEngine;
[RequireComponent(typeof(Rigidbody2D))]
public class PlatformerController : MonoBehaviour
{
public float moveSpeed = 7f;
public float jumpForce = 12f;
public float coyoteTime = 0.1f;
public float jumpBuffer = 0.1f;
public Transform groundCheck;
public float groundRadius = 0.15f;
public LayerMask groundMask;
Rigidbody2D rb;
float coyoteCounter, bufferCounter, input;
void Awake() => rb = GetComponent<Rigidbody2D>();
void Update()
{
input = Input.GetAxisRaw("Horizontal");
bool grounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, groundMask);
coyoteCounter = grounded ? coyoteTime : coyoteCounter - Time.deltaTime;
bufferCounter = Input.GetButtonDown("Jump") ? jumpBuffer : bufferCounter - Time.deltaTime;
if (bufferCounter > 0f && coyoteCounter > 0f)
{
rb.linearVelocity = new Vector2(rb.linearVelocity.x, jumpForce);
bufferCounter = 0f;
coyoteCounter = 0f;
}
// Variable jump height: releasing early cuts the jump short.
if (Input.GetButtonUp("Jump") && rb.linearVelocity.y > 0f)
rb.linearVelocity = new Vector2(rb.linearVelocity.x, rb.linearVelocity.y * 0.5f);
}
void FixedUpdate() => rb.linearVelocity = new Vector2(input * moveSpeed, rb.linearVelocity.y);
}Usa linearVelocity de Unity 6; en versiones antiguas usa velocity. Lee el Input Manager clásico; con el paquete Input System, lee las mismas acciones de tu asset de input.
3. Por qué importan los tres recursos de sensación
| Recurso | Lo que siente el jugador |
|---|---|
| Coyote time | Los saltos justo después de salir de una repisa aún funcionan, así que el juego se siente justo |
| Jump buffer | Un salto pulsado justo antes de aterrizar aún ocurre, así que el juego se siente receptivo |
| Altura variable | Toca para un saltito, mantén para un salto alto, dando control |
4. Ajústalo
Haz primero el salto un poco demasiado ágil y luego suavízalo. Sube la gravity scale para una caída más pesada. Añade un pequeño multiplicador de gravedad en la caída para que el descenso sea más rápido que el ascenso. Haz playtests con otras personas, porque la sensación es subjetiva.
5. Siguientes pasos
Añade un dash, deslizarse por la pared y animaciones, y luego diseña un mapa pequeño. Cómo hacer tu propio Hollow Knight es la hoja de ruta, y cómo animar un personaje en Blender cubre rigs de personajes 3D. Para el aspecto, mira Readable Pixels.
Preguntas frecuentes
Usa un Rigidbody2D, fija la velocidad horizontal desde el input, comprueba el suelo con un círculo de solapamiento y fija la velocidad vertical para saltar.
Un breve margen tras dejar una repisa durante el cual el jugador aún puede saltar.
Un Rigidbody2D funciona bien en plataformas basadas en físicas. Algunos equipos escriben controladores cinemáticos para un movimiento exacto al píxel.
Se aplica la misma lógica. En Godot, usa CharacterBody2D y lleva los mismos temporizadores.
Quién lo escribió
Imersa Studios crea los sistemas Unity, los packs low poly y las guías que se venden en itch.io. El código y las técnicas de aquí salen de publicar esos productos. Más sobre el estudio.

