Fala pessoal, beleza?
Tô com um problema na movimentação do meu personagem usando o CharacterController com o Input System novo da Unity.
Quando aperto W+A ou W+D, o personagem anda rápido demais (bug da diagonal). E quando aperto só W, ele anda pra trás ou desliza sozinho, tipo o “Michael Jackson moonwalk”
Já tentei normalizar o vetor, ajustar o
transform.forward
, e revisar os valores do CharacterController, mas nada resolveu 100%.
Alguém já passou por isso? Segue o script: `using UnityEngine;
using UnityEngine.InputSystem;
public class JogadorController : MonoBehaviour
{
public float velocidade = 5f;
public float gravidade = -9.81f;
public Transform cameraTransform;
private CharacterController controller;
private Vector3 velocidadeVertical;
private Vector2 inputMovimento;
private void Awake()
{
controller = GetComponent<CharacterController>();
}
// Input System - chama quando houver input de movimento
public void OnMovimento(InputAction.CallbackContext context)
{
inputMovimento = context.ReadValue<Vector2>();
}
void Update()
{
// cria vetor de direção a partir do input
Vector3 direcao = new Vector3(inputMovimento.x, 0f, inputMovimento.y).normalized;
if (direcao.magnitude >= 0.1f)
{
// calcula o ângulo em relação à câmera
float anguloAlvo = Mathf.Atan2(direcao.x, direcao.z) * Mathf.Rad2Deg + cameraTransform.eulerAngles.y;
// gira suavemente na direção da câmera
Vector3 direcaoMovimento = Quaternion.Euler(0f, anguloAlvo, 0f) * Vector3.forward;
direcaoMovimento.Normalize();
// move o personagem
controller.Move(direcaoMovimento * velocidade * Time.deltaTime);
}
// gravidade
if (controller.isGrounded && velocidadeVertical.y < 0)
{
velocidadeVertical.y = -2f; // impede flutuação
}
velocidadeVertical.y += gravidade * Time.deltaTime;
// aplica a gravidade separadamente (eixo Y)
controller.Move(Vector3.up * velocidadeVertical.y * Time.deltaTime);
}
}
`