Unity - Script de movimento básico

Nesta lição, escreveremos o código que faz um gameObject mover para cima, para baixo, para a esquerda e para a direita com base na entrada do usuário. Isso deve nos ajudar a entender o fluxo de trabalho de script do Unity com mais facilidade.

Lembre-se de que cada GameObject tem pelo menos um componente - Transform. O que é especial é que a Transform de um gameObject também aparece como variáveis ​​no lado de script do Unity para que possamos modificá-la via código. Isso também não está restrito ao Transform; todos os componentes no Unity têm propriedades, que são acessíveis por meio de variáveis ​​no script.

Vamos começar com nosso script de movimento. Crie um novo script com o nome “Movimento”.

Agora, abra o script e você deverá ver as mesmas coisas que viu na última lição.

Vamos criar uma variável flutuante pública chamada speed. Fazendo uma variávelpublic no Unity tem uma grande vantagem -

  • A variável é exibida como um campo modificável dentro do editor, então você não precisa ajustar manualmente os valores no código.

public class Movement : MonoBehaviour {
   public float speed;
}

Se salvarmos este script sem tocar nos outros métodos, ele deve ser compilado no Unity.

(Você pode ver quando ele está compilando pelo

ícone no canto inferior direito.)

Próximo, drag and dropo script dos Ativos para o GameObject. Se você fizer isso corretamente, é isso que você deve ver nas propriedades do GameObject -

Como o valor da velocidade é ajustável e não precisa ser alterado no código o tempo todo, podemos usar o método update () em vez de start ().

Vamos agora considerar os objetivos do método de atualização -

  • Verifique a entrada do usuário.

  • Se houver uma entrada do usuário, leia as instruções de entrada.

  • Altere os valores de posição da transformação do objeto com base em sua velocidade e direção. Para fazer isso, adicionaremos o seguinte código -

void Update() {
   float h = Input.GetAxisRaw(“Horizontal”);
   float v = Input.GetAxisRaw(“Vertical”);
   
   gameObject.transform.position = new Vector2 (transform.position.x + (h * speed), 
      transform.position.y + (v * speed));

Vamos agora discutir o código em breif.

Primeiro de tudo, fazemos uma variável de ponto flutuante chamada h (para horizontal), e seu valor é dado pelo Input.GetAxisRawmétodo. Este método retorna -1, 0 ou 1 dependendo de qual tecla o jogador pressionou nas setas para cima / para baixo / esquerda / direita.

A classe Input é responsável por obter informações do usuário na forma de pressionamento de teclas, entrada do mouse, entrada do controlador e assim por diante. O método GetAxisRaw é um pouco mais difícil de entender, portanto, voltaremos a ele mais tarde.

A seguir, nós somos updating a posição do nosso gameObject para uma nova posição definida pela criação de um novo Vector2. O Vector2 usa 2 parâmetros, que são seusx and yvalores respectivamente. Para o valor x, fornecemos a soma dascurrent posição e seu speed, adicionando efetivamente alguma quantidade a cada quadro em que a tecla é pressionada.

Salve este script e volte para o Unity. O Unity atualizará automaticamente todos os scripts assim que for compilado com sucesso, então você não precisa reconectar o script novamente.

Agora que você terminou, altere o valor do speednas propriedades do GameObject para dizer 0,8. Isso é importante porque um valor mais alto fará o jogador se mover muito rápido.

Agora clique Play e veja seu primeiro pequeno jogo em ação!

Tente pressionar as setas do teclado e se mover. Para parar o jogo, simplesmente pressione Play novamente. Você pode até ajustar a velocidade em tempo real para não ter que parar e iniciar o tempo todo.

Na próxima lição, aprenderemos sobre corpos rígidos e colisões.