Como movimentar Personagem | Unity
Movimentar um personagem na Unity é um dos aspectos fundamentais no desenvolvimento de jogos. Seja em um jogo de plataforma, RPG ou ação, um bom sistema de movimentação pode tornar a experiência do jogador mais fluida e responsiva. Existem diversas formas de implementar esse movimento, utilizando Rigidbody, Character Controller ou manipulando diretamente a posição do personagem com Transform. Cada abordagem tem suas vantagens e desvantagens, dependendo do tipo de jogo que você deseja criar. Neste guia, vamos explorar as principais maneiras de movimentar um personagem em Unity, ajudando você a escolher a melhor opção para o seu projeto.
Vamos começar pela base: o movimento do personagem. Para isso, utilizaremos o novo sistema de entrada da Unity, que torna a codificação mais flexível e escalável.

Sistema de Entrada da Unity
A Unity implementou um novo sistema de entrada (Input System) que permite configurar controles rapidamente para múltiplas plataformas, como PCs, consoles, dispositivos móveis e até realidade virtual. Isso facilita muito a adaptação do jogo para diferentes tipos de controle, sem a necessidade de reescrever o código para cada plataforma.
Por essa razão, vamos utilizar esse novo sistema para tornar nosso jogo mais moderno e preparado para o futuro.
Vantagens do Novo Sistema de Entrada:
- Suporte a múltiplas plataformas de forma nativa;
- Facilidade na configuração dos controles sem precisar modificar diretamente o código;
- Melhor organização e modularidade do código-fonte;
- Suporte a eventos e ações, permitindo maior flexibilidade na programação dos movimentos.

Movimento do Personagem
O movimento do personagem pode ser implementado utilizando componentes como Transform
ou Rigidbody2D
. O Transform
é útil para animações simples e movimentos que não precisam de interação com a física do jogo, enquanto o Rigidbody2D
permite interações físicas realistas, como colisões e gravidade.
Neste curso, utilizaremos o Rigidbody2D
para garantir um movimento mais dinâmico e realista. A partir da videoaula a seguir, você verá uma demonstração prática de como configurar esse componente para movimentar seu personagem.
Logo, podemos criar a classe ManagerInput, a qual será responsável por capturar as informações de entrada e iremos fazer a codificação a seguir:
Criando a Classe ManagerInput
A classe ManagerInput
será responsável por capturar as informações de entrada do jogador e repassá-las ao personagem. Dessa forma, conseguimos separar a lógica de entrada da lógica de movimentação, tornando o código mais modular e fácil de manter.
Aqui está o código da ManagerInput
:
using UnityEngine; using UnityEngine.InputSystem; public class ManagerInput : MonoBehaviour { private float inputX; public void SetInputMove(InputAction.CallbackContext value) { inputX = value.ReadValue<Vector2>().x; } public float GetInputX() { return inputX; } }
Após criar a classe ManagerInput
, devemos associá-la ao objeto Player
dentro da Unity. Isso garantirá que os comandos de entrada sejam corretamente detectados e processados.
Implementando a Classe Player
Agora que temos um sistema de entrada funcional, precisamos implementar a classe Player
, responsável por aplicar os movimentos ao personagem com base nas entradas do jogador.
Classe Player
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { [Header("Dependencies")] [SerializeField] ManagerInput managerInput; [SerializeField] Rigidbody2D rigidBody2D; [Header("Physics")] [SerializeField] float speed; // Start is called before the first frame update void Start() { } // Update is called once per frame void FixedUpdate() { Move(); } private void Move() { rigidBody2D.velocity = new Vector2(managerInput.GetInputX() * speed, rigidBody2D.velocity.y); }
No método Move()
, utilizamos a propriedade velocity
do Rigidbody2D
para modificar a velocidade do personagem com base na entrada do jogador. Esse método será chamado a cada FixedUpdate()
para garantir um movimento fluido e consistente.
Melhorando a Movimentação
Agora que o movimento básico está implementado, podemos aprimorá-lo adicionando suavização e aceleração progressiva para deixar o jogo mais realista e agradável de jogar.
Adicionando Suavização no Movimento
Podemos implementar uma suavização no movimento utilizando Mathf.Lerp
, que interpola suavemente entre dois valores:
private float currentSpeed; private float acceleration = 5f; private void Move() { float targetSpeed = managerInput.GetInputX() * speed; currentSpeed = Mathf.Lerp(currentSpeed, targetSpeed, Time.fixedDeltaTime * acceleration); rigidBody2D.velocity = new Vector2(currentSpeed, rigidBody2D.velocity.y); }
Isso fará com que o personagem acelere e desacelere de maneira gradual, em vez de mudar instantaneamente de velocidade, criando um movimento mais natural.
Conclusão
Neste primeiro módulo, aprendemos como implementar o sistema de entrada e a movimentação do personagem em um jogo de plataforma 2D na Unity. Com o uso do Rigidbody2D
, conseguimos garantir um movimento realista, e com a suavização do movimento, criamos uma experiência mais fluida para o jogador.
Agora é sua vez de colocar a mão na massa! Teste o código, faça modificações e experimente diferentes velocidades e acelerações. No próximo módulo, abordaremos o sistema de pulo e a interação com o cenário. Vamos nessa!
Agora, é sua vez de colocar a mão na massa!
Aproveite para pegar um ebook de criação de um jogo 2D.
Nosso canal no youtube: