Alguem poderia me explicar um pouco sobre GetAxisRaw?
2 participantes
Página 1 de 1
Alguem poderia me explicar um pouco sobre GetAxisRaw?
Boa noite a todos, queria saber como funciona esse metodo de player controller? Estou acostumado com if(Input.Getkey(keyCode.W))
- Código:
void Update()
{
float xAxis = Input.GetAxisRaw("Horizontal");
float yAxis = Input.GetAxisRaw("Vertical");
Vector3 movimento = new Vector3(xAxis, 0, yAxis) * moveSpeed * Time.deltaTime;
rb.MovePosition(transform.position + movimento);
}
}
nvndx- Membro
- PONTOS : 1969
REPUTAÇÃO : 2
Idade : 22
Respeito as regras :
Re: Alguem poderia me explicar um pouco sobre GetAxisRaw?
Vamos lá... Primeiro o nome em inglês da função já entrega o que ela faz: Get = obter/pegar, Axis = eixo, raw = é algo como "puro/diretamente".
Então seria algo como "Obter o eixo diretamente".
Como assim o eixo? Você passa como argumento da função qual eixo quer obter de acordo com o input do usuário, se for "horizontal" será o eixo correspondente as teclas esquerda e direita e o a e d. Se for "vertical" serão as teclas baixo e cima, w e s. Mas você pode configurar outras teclas para cada eixo nas configurações do Unity.
Quando a pessoa pressiona para a direita ou "D" o GetAxisRaw retorna imediatamente o valor 1. Caso pressione para a esquerda ou "A", retorna -1. Não pressionando nada, retorna 0. O mesmo vale pro vertical e suas respectivas teclas.
Então ao fazer:
Você está criando um Vector3 com três valores.
Supondo que a pessoa pressione pra direita, o Vector3 teria os valores: 1,0,0. Agora segurando as teclas direta e pra baixo, seria: 1, 0, -1.
Se você coloca esse Vector "movement" dentro de um comando de movimentação do objeto, como o rigidbody.velocity ou igual o exemplo rigidbody.MovePosition, você vai atualizar o movimento do objeto conforme esses valores, aí ele se move, ou rotaciona, depende do que você faça com isso.
Mas o GetAxisRaw lhe retorna esses valores diretamente (1, 0 e -1), como diz o nome da função "Raw" era de "diretamente", lembra?
Se você não quiser que seu personagem se mova tão abruptamente a cada uma unidade por segundo, precisa multiplicar ele por alguma velocidade, normalmente um float.
Se essa velocidade vale 0.6F, por exemplo, significa que o personagem vai se mover/rotacionar 0.6F frames por segundo, deixando o movimento com uma certa "suavização", o que chamamos de smooth.
Então se fizer Input.GetAxisRaw("Horizontal") * 0.6F;
E a pessoa pressiona para a direita, o valor de retorno desse GetAxisRaw será de 0.6 (ou seja, 1*0.6), ou para a esquerda -0.6 (-1*0.6)
Claro que, se quiser fixar esse valor de 0.6 dentro do Update que possui chamadas inconstantes, precisará ainda multiplicar toda essa coisa por Time.deltaTime, por isso eu digo, se tá trabalhando com física, coloca no FixedUpdate e poupe-se deste e outros trabalhos.
Então por isso que seu código fica:
Na última linha o MovePosition atualiza a posição atual do objeto, pegando a posição que ele se encontra no momento (transform.position) e soma com a nova posição associada à tecla que o usuário apertou.
É basicamente isso, espero ter ajudado.
Então seria algo como "Obter o eixo diretamente".
Como assim o eixo? Você passa como argumento da função qual eixo quer obter de acordo com o input do usuário, se for "horizontal" será o eixo correspondente as teclas esquerda e direita e o a e d. Se for "vertical" serão as teclas baixo e cima, w e s. Mas você pode configurar outras teclas para cada eixo nas configurações do Unity.
Quando a pessoa pressiona para a direita ou "D" o GetAxisRaw retorna imediatamente o valor 1. Caso pressione para a esquerda ou "A", retorna -1. Não pressionando nada, retorna 0. O mesmo vale pro vertical e suas respectivas teclas.
Então ao fazer:
- Código:
var movement = new Vector3(Input.GetAxisRaw(
"Horizontal", 0, Input.GetAxisRaw("Vertical");
Você está criando um Vector3 com três valores.
Supondo que a pessoa pressione pra direita, o Vector3 teria os valores: 1,0,0. Agora segurando as teclas direta e pra baixo, seria: 1, 0, -1.
Se você coloca esse Vector "movement" dentro de um comando de movimentação do objeto, como o rigidbody.velocity ou igual o exemplo rigidbody.MovePosition, você vai atualizar o movimento do objeto conforme esses valores, aí ele se move, ou rotaciona, depende do que você faça com isso.
Mas o GetAxisRaw lhe retorna esses valores diretamente (1, 0 e -1), como diz o nome da função "Raw" era de "diretamente", lembra?
Se você não quiser que seu personagem se mova tão abruptamente a cada uma unidade por segundo, precisa multiplicar ele por alguma velocidade, normalmente um float.
Se essa velocidade vale 0.6F, por exemplo, significa que o personagem vai se mover/rotacionar 0.6F frames por segundo, deixando o movimento com uma certa "suavização", o que chamamos de smooth.
Então se fizer Input.GetAxisRaw("Horizontal") * 0.6F;
E a pessoa pressiona para a direita, o valor de retorno desse GetAxisRaw será de 0.6 (ou seja, 1*0.6), ou para a esquerda -0.6 (-1*0.6)
Claro que, se quiser fixar esse valor de 0.6 dentro do Update que possui chamadas inconstantes, precisará ainda multiplicar toda essa coisa por Time.deltaTime, por isso eu digo, se tá trabalhando com física, coloca no FixedUpdate e poupe-se deste e outros trabalhos.
Então por isso que seu código fica:
- Código:
void FixedUpdate (){
var axisX = Input.GetAxisRaw("Horizontal");
var axisZ = Input.GetAxisRaw("Vertical");
var movement = new Vector3 (axisX, 0, axisZ) * speed;
rigidbody.MovePosition(transform.position + movement);
}
Na última linha o MovePosition atualiza a posição atual do objeto, pegando a posição que ele se encontra no momento (transform.position) e soma com a nova posição associada à tecla que o usuário apertou.
É basicamente isso, espero ter ajudado.
Tópicos semelhantes
» Porque esse script não esta funcionando alguém poderia me explicar ??
» Alguém sabe algum tutorial/curso que me ensine um pouco mais sobre compras dentro do game?
» Alguém consegue me explicar essa matemática?
» Alguém poderia me ajuda?
» Alguem sabe explicar o que é o C# Job System e para o que ele serve
» Alguém sabe algum tutorial/curso que me ensine um pouco mais sobre compras dentro do game?
» Alguém consegue me explicar essa matemática?
» Alguém poderia me ajuda?
» Alguem sabe explicar o que é o C# Job System e para o que ele serve
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos