Mesmo com o freeze rotation no inspector meu personagem, após a refatoração, está olhando pro teto. As balas também não estão acertando os zumbis.
Mesmo com o freeze rotation no inspector meu personagem, após a refatoração, está olhando pro teto. As balas também não estão acertando os zumbis.
Codigo MovimentoPersonagem
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MovimentoPersonagem : MonoBehaviour
{
private Rigidbody meuRigidbody;
void Awake()
{
meuRigidbody = GetComponent<Rigidbody>();
}
public void Movimentar(Vector3 direcao, float velocidade)
{
meuRigidbody.MovePosition(
meuRigidbody.position +
direcao.normalized * velocidade * Time.deltaTime);
}
public void Rotacionar(Vector3 direcao)
{
Quaternion novaRotacao = Quaternion.LookRotation(direcao);
meuRigidbody.MoveRotation(novaRotacao);
}
}
Codigo ControlaJogador
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ControlaJogador : MonoBehaviour, IMatavel
{
private Vector3 direcao;
public LayerMask MascaraChao;
public GameObject TextoGameOver;
public ControlaInterface scriptControlaInterface;
public AudioClip SomDeDano;
private MovimentoJogador meuMovimentoJogador;
private AnimacaoPersonagem animacaoJogador;
public Status statusJogador;
private void Start()
{
Time.timeScale = 1;
meuMovimentoJogador = GetComponent<MovimentoJogador>();
animacaoJogador = GetComponent<AnimacaoPersonagem>();
statusJogador = GetComponent<Status>();
}
// Update is called once per frame
void Update()
{
float eixoX = Input.GetAxisRaw("Horizontal");
float eixoZ = Input.GetAxisRaw("Vertical");
direcao = new Vector3(eixoX, 0, eixoZ);
animacaoJogador.Movimentar(direcao.magnitude);
if (statusJogador.Vida <= 0)
{
if (Input.GetButtonDown("Fire1"))
{
SceneManager.LoadScene("game");
}
}
}
void FixedUpdate()
{
meuMovimentoJogador.Movimentar(direcao, statusJogador.Velocidade);
meuMovimentoJogador.RotacaoJogador(MascaraChao);
}
public void TomarDano(int dano)
{
statusJogador.Vida -= dano;
scriptControlaInterface.AtualizarSliderVidaJogador();
ControlaAudio.instancia.PlayOneShot(SomDeDano);
if (statusJogador.Vida <= 0)
{
Morrer();
}
}
public void Morrer()
{
Time.timeScale = 0;
TextoGameOver.SetActive(true);
}
}
Oi, Felipe, tudo bem?
Esse é um problema comum, quando fiz o curso eu deveria ter zerado a rotação em Y porque facilitaria bastante. Mas como eu tinha posicionado o meu personagem em 0 não fez diferença, mas eu vejo que limitei um pouco a forma de posicionar o personagem.
Eu deixei esse tópico pinado no Forum se quiser dar uma olhada que resolve esse problema e inclusive faz o link para outro tópico que melhora esse código, já que você tá na parte 2 já tá na hora de dar uma mexida nele, agora que já sabe novas funções.
Abraço