Problema na movimentação do personagem

Alguém pode me ajudar por gentileza :slight_smile:

toda vez que tento movimentar meu personagem para frente ou para trás ele vai apenas em direções diagonais, já vi o video 2x revisei o código, mas não consigo resolver. Se alguém puder me ajudar eu agradeço.

abaixo o código

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MovimentoPersonagem : MonoBehaviour
{
private CharacterController characterController;
[SerializeField] private float velocidade;

private Vector3 gravidade = new Vector3(0, -9.81f, 0);

// Start is called before the first frame update
void Start()
{
    characterController = GetComponent<CharacterController>();
}

// Update is called once per frame
void Update()
{
    float movimentoHorizontal = Input.GetAxis("Horizontal");
    float movimentoVertical = Input.GetAxis("Vertical");

    Vector3 movimento =  new Vector3(movimentoHorizontal, 0, movimentoVertical);


    characterController.Move(movimento.normalized * Time.deltaTime * velocidade);
    characterController.Move(gravidade * Time.deltaTime);


    if (movimento != Vector3.zero)
    {
        Quaternion rotacaoAlvo = Quaternion.LookRotation(movimento);
        transform.rotation = Quaternion.Slerp(transform.rotation, rotacaoAlvo, Time.deltaTime * 10f);
    }
}

}

1 curtida

O problema pode ser no modelo do personagem, eu já tive algo parecido e o problema era nas animações, tenta colocar o script em algum outro objeto pra testar, mas aparentemente o script está certo.

2 curtidas

Você está movimentando o personagem no eixo global. Ou seja, ir para frente é aumentar o valor de posição Z do personagem.

Provavelmente sua câmera está na diagonal, com alguma rotação de eixo, dessa forma, quando você aperta para frente, o personagem aparenta ir diagonamente.


Veja só, quando a câmera fica meio de lado, mesmo você indo para frente, parece que o movimento está na diagonal:

Se esse for seu caso, você tem que corrigir a rotação da câmera; ou implementar no seu código uma lógica para transformar o movimento em eixo local da câmera.

Nas aulas do módulo Construção Extrema, eu ensino como se mover no eixo local da câmera.

3 curtidas