9
respostas

Mudança na Rotação do personagem

Boa Tarde, eu sei que tem um tópico que poderia tirar todas as minhas duvidas, porem onde eu coloco o NavMashSurface, para a opção NavigationStatic ficar disponivel?

E outra coisa, o curso não poderia se atualizado, só que colocando novas "atividades" sem serem em video, explicado as mudanças de certas funcionalidades da Unity, assim não deixado o curso obsoleto com o tempo?

9 respostas

Oi, Vitor, tudo bem?

Eu venho deixando no forum alguns itens fixados que resolvem esses problemas, você pode entrar em contato direto com a Alura ou perguntar no Discord de alguma previsão de atualização, não sei dizer.

Segue um tópico que ajuda nesse problema: https://cursos.alura.com.br/forum/topico-duvida-utilizacao-do-navigation-303549

Qualquer dúvida estou por aqui.

Ok, estou na parte de tirar a LayerChao e escrevi o código dessa forma, porem esta dando erro, o que estou fazendo de errado?

 public class MovimentoJogador : MovimentoPersonagem
 {
public void RotacaoJogador ()
{
    Ray raio = Camera.main.ScreenPointToRay(Input.mousePosition);
   Debug.DrawRay(raio.origin, raio.direction * 100, Color.red);
   Plane plano = new Plane(Vector3.up, posicaoMira.transform.position);

   float distanciaColisao;
   

if (plano.Raycast(ray, out distanciaColisao))
{
Vector3 localColisao = raio.GetPoint(distanciaColisao);
localColisao.y = 0; //ou transform.position.y

//direcao para onde vamos olhar baseado onde estamos
Vector3 posicaoParaOlhar = localColisao - transform.position;

Quaternion novaRotacao = Quaternion.LookRotation(posicaoParaOlhar);
GetComponent<Rigidbody>().MoveRotation(novaRotacao);
}
}
}

E fica dando essas mensagens de erro

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Olá, a variável posicaoMira não existe nesse script então tem que fazer uma referencia a ela e anexar a mira, e a variável ray tem que trocar o nome por raio acho que isso deve resolver os problemas desse script :)

Oi, a parte de mudar o nome de ray para raio, foi facil, porém não estou conseguindo pensar como fazer referencia a posicaoMira, como eu faço isso mesmo?

Você pode criar uma variável tipo:

public gameObject posicaoMira

E depois associar ela pelo inspector, talvez seja o modo mais conveniente de fazer, daria também pra passar como variável pro método, algo como:

public void RotacaoJogador (gameObject posicaoRotacao)
  (..... resto do método)

E ai lá no jogador você cria a variável de posicaoMira e na chamada faz RotacaoJogador (posicaoMira)

Oi, eu usei a primeira idéia de criar o posicaMira como objeto e fez o jogo voltar a funcionar, porem que objeto eu poderia associar no inspetor, para fazer o personagem voltar a rotacionar

A e tambem para o jogo voltar a funcioanar no ControlaJogador eu tive que apagar a linha:

 meuMovimentoJogador.RotacaoJogador;
 

Essa linha ela ainda é necessaria? se sim como ela volta a funcionar?

Sim, é, se não tá funcionando é porque tem algo errado, o objeto para associar é aquele objeto que usamos como o local de criar as balas do tiro

Bom dia, funcionou certinho e obrigado pela paciencia e atenção, a partir de agora vou seguir o outro tópico agora, mas me tira uma duvida rapidinho, o código ficou assim:

Movimento Jogador

public GameObject posicaoMira;

public void RotacaoJogador (GameObject posicaoMira)
{  
    
    Ray raio = Camera.main.ScreenPointToRay(Input.mousePosition);
   Debug.DrawRay(raio.origin, raio.direction * 100, Color.red);
   Plane plano = new Plane(Vector3.up, posicaoMira.transform.position);
   

Controla Jogador

 public GameObject posicaoMira;
 ...
         void FixedUpdate()
    {        
    meuMovimentoJogador.Movimentar(direcao, statusJogador.Velocidade);
    meuMovimentoJogador.RotacaoJogador(posicaoMira);
}

Mas na parte do GameObject, tive que associar o CanoDaArma em dois scripts diferentes, isso é necessário ou redundante?

Precisa não! É um ou o outro, você pode usar como referência ou como argumento, como argumento eu acho mais "certo" então você pode apagar a variável (public GameObject posicaoMira;) do script de movimento e deixar só no controla, o script de movimento vai puxar do controla.

Bons estudos! Se precisar de algo estou por aqui.