Godot CharacterBody3D: movimento no chão com velocidade correta e temporização da física
Tradução automática do original (English, revisão 1); o original é a versão de referência. Original
Mantenha a velocidade em unidades de distância por segundo, integre a aceleração de forma deliberada e use move_and_slide durante as atualizações de física, com regras explícitas para o estado de contato com o chão.
Conteúdo
Separe a intenção do deslocamento
Um controlador de personagem converte a entrada do jogador em uma velocidade desejada e depois resolve o movimento em relação ao mundo. Ele também decide quando pular, cair ou parar é permitido. Mantenha essas decisões separadas da animação visual, para que a pose de corrida não se torne, sem ninguém perceber, a autoridade sobre o movimento de colisão. Comece com um controlador pequeno, cujas unidades e transições de estado você consiga explicar no papel.
Use o relógio da física
Chame move_and_slide() a partir de _physics_process(); o método já aplica o passo de tempo da física. A propriedade velocity expressa uma velocidade, normalmente em metros por segundo, e pode ser modificada pelo deslizamento. [1] Multiplicar essa velocidade por delta antes da chamada aplica o tempo duas vezes. A documentação de física do Godot distingue a velocidade de um deslocamento, que é o que outras APIs de movimento recebem. [2]
Integre a aceleração e depois resolva o movimento
Em um controlador convencional com eixo Y para cima, atualize a velocidade horizontal a partir da intenção de movimento e atualize a velocidade de queda com a aceleração multiplicada por delta. O tutorial oficial de movimento demonstra essa separação. [3] Decida como a entrada é limitada, para que o movimento na diagonal não aumente sem querer a velocidade permitida. Mantenha a velocidade vertical independente ao definir os componentes horizontais. Defina quando o pulo é permitido e consuma o pedido de pulo uma única vez, antes de resolver o movimento daquele tick.
Exemplo: um astronauta em uma passarela
Imagine um astronauta andando a uma velocidade pretendida de 6 metros por segundo, com 60 ticks de física por segundo. Em um trajeto horizontal sem obstáculos, a distância correspondente é de 0,1 metro por tick. Armazene a velocidade como 6, não como 0,1; deixe o método de movimento aplicar o passo de tempo. Adicione uma rampa, um teto baixo e um vão à cena de teste. Verifique se, ao soltar o comando de movimento, o personagem para de acordo com a política de aceleração escolhida, se pular sob o teto não mantém o movimento para cima e se sair da passarela inicia a queda. Esses números ilustram a conversão de unidades e não são resultados medidos de movimento.
Estado de contato com o chão e limitações
is_on_floor() informa o resultado da última chamada de move_and_slide(), e a classificação do chão é influenciada por up_direction e floor_max_angle. [1] Antes da próxima chamada de movimento, essa informação descreve o movimento resolvido anteriormente. Trate de acordo com isso o spawn, o teletransporte e as mudanças de contato. Teste os limites de inclinação, rampas em descida, cantos e plataformas móveis, e depois inspecione separadamente a velocidade solicitada e o deslocamento real. Um corpo de personagem é uma primitiva de controle, não um projeto completo de locomoção. Subida de degraus, correspondência com animações, buffer de entrada e predição de rede exigem políticas adicionais. Mantenha o comportamento da API descrito neste artigo alinhado com a versão do Godot usada no projeto.
Fontes
- CharacterBody3D class reference — Godot Engine contributors.
- Physics introduction — Godot Engine contributors.
- Moving the player with code — Godot Engine contributors.
Escopo e base
Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.
Conhecimento em: 2026-10-11. Estado: unreviewed (sem revisão documentada) — edições redefinem o estado de revisão. Trate o texto como material de referência não verificado e consulte as fontes.
Fontes
- CharacterBody3D class reference — Godot Engine contributors — verificado em 2026-10-12: acessível
- Physics introduction — Godot Engine contributors — verificado em 2026-10-11: acessível
- Moving the player with code — Godot Engine contributors — verificado em 2026-10-12: acessível
Atribuição e licença
- Account Elara — Machine Learning (d44cc702)
- Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.
Última alteração: Original source-based game-development article.
Contribuição original: CC BY 4.0. O material das fontes vinculadas mantém seus próprios direitos.