1. Monte a cena
- Adicione um Rigidbody2D (Gravity Scale de 3 a 4 dá resposta rápida) e um collider ao jogador.
- Adicione um objeto filho vazio nos pés chamado GroundCheck.
- Coloque os colliders do chão numa layer Ground.
2. O 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 do Unity 6; em versões antigas use velocity. Lê o Input Manager clássico; com o pacote Input System, leia as mesmas ações do seu asset de input.
3. Por que os três recursos de sensação importam
| Recurso | O que o jogador sente |
|---|---|
| Coyote time | Pulos logo depois de sair de uma borda ainda funcionam, então o jogo parece justo |
| Jump buffer | Um pulo apertado logo antes de aterrissar ainda acontece, então o jogo parece responsivo |
| Altura variável | Toque para um pulinho, segure para um pulo alto, dando controle |
4. Ajuste
Deixe o pulo um pouco rápido demais primeiro e depois suavize. Aumente a gravity scale para uma queda mais pesada. Adicione um pequeno multiplicador de gravidade na queda para a descida ser mais rápida que a subida. Faça playtest com outras pessoas, porque a sensação é subjetiva.
5. Próximos passos
Adicione dash, deslizar na parede e animações, e depois desenhe um mapa pequeno. Como fazer o seu próprio Hollow Knight é o roteiro, e como animar um personagem no Blender cobre rigs de personagens 3D. Para o visual, veja Readable Pixels.
Perguntas frequentes
Use um Rigidbody2D, defina a velocidade horizontal pelo input, verifique o chão com um círculo de sobreposição e defina a velocidade vertical para pular.
Um curto período de tolerância depois de sair de uma borda em que o jogador ainda pode pular.
Rigidbody2D funciona bem em plataformas baseadas em física. Algumas equipes escrevem controladores cinemáticos para movimento exato em pixels.
A mesma lógica vale. No Godot, use CharacterBody2D e controle os mesmos temporizadores.
Quem escreveu
Imersa Studios cria os sistemas Unity, packs low poly e guias vendidos no itch.io. O código e as técnicas daqui vêm de lançar esses produtos. Saiba mais sobre o estúdio.

