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:
