Criação de jogos – Tutorial de Unity 5 – Criado pot CriaJogos http://criajogos.equilibrecursos.net. Prefere tutoriais em video? Visite https://goo.gl/0AEeuC

OBS: sempre que eu me referir à nossa “estaca”, lembre-se que, até o momento, me refiro apenas ao objeto player 1 no nosso jogo!

Muito bem, agora temos uma estaca branca que se mexe para cima e para baixo, sem restrições, e uma bolinha com todas as propriedades da física (menos gravidade). Vamos dar um jeito nos players!

Primeiro, precisamos dar uma conversada sobre algo que comentei há algumas páginas. Eu disse que, dependendo da potência do seu computador, nosso player em forma de estaca ou poderia sair voando pela tela, ou se movimentaria super vagarosamente.

Isso acontece pelo motivo que nosso código, até agora, depende muito da taxa de quadros por segundo que o jogo roda. Se ele roda a 60 quadros por segundo, o Update é chamado 60 vezes por segundo, e o código de movimentar a nossa estaca acontece 60 vezes por segundo. Se o jogo roda a 30 quadros por segundo, divida tudo isso por 2, inclusive a velocidade do player. Sacou o nosso pequeno problema? A gente precisa fazer com que o personagem se mexa com uma só velocidade, independente da taxa de quadros por segundo do jogo!

Mas como fazer isso? Simples! Vamos fazer com que a movimentação do jogador fique dependente do tempo que se passa, e não da taxa de quadros por segundo! Assim, podemos por exemplo fazer que ele se mexa 1m por segundo e não a cada 30 quadros! Assim, se o jogo passar a rodar a 60 quadros, ele vai continuar se movendo 1m por segundo. Repito a pergunta: Mas como fazer isso? Tá tudo tranquilo! Com mais um tiquinho de nada de código a coisa se resolve. Vamos ver novamente a linha de código que cuida da movimentação da nossa estaca:

transform.position += new Vector3 (0, Input.GetAxisRaw ("Vertical"), 0);

Qual parte que efetivamente cuida da movimentação do nosso personagem? Input.GetAxisRaw (“Vertical”). E como fazemos para que esse código pare de depender da taxa de quadros e passe a depender de tempo? Multiplicando esse Input por Time.deltaTime. Mas que raios é isso? O deltaTime faz um cálculo para ver quanto tempo levou para o último quadro do seu jogo ser completado! Mas isso não acabaria com o propósito de deixar ele independente da taxa de quadros? Não! Esse cálculo é necessário! E pode ficar tranquilo, pois no fim das contas o deltaTime deixa sim seu código independente da taxa de quadros do seu jogo. Acontece que essa é uma conversa bem mais avançada do que o proposto neste tutorial. Vamos continuar com as coisas simples!

Modifique agora sua linha de código para que fique dessa maneira:

transform.position += new Vector3 (0, Input.GetAxisRaw ("Vertical") * Time.deltaTime, 0);

O código todo do script players.cs está assim:

using UnityEngine;
using System.Collections;

public class players : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        transform.position += new Vector3 (0, Input.GetAxisRaw ("Vertical") * Time.deltaTime, 0);
    }
}

Rode o seu jogo e veja que vai haver uma pequena modificação na velocidade da movimentação do seu jogador! Mas isso pode ser corrigido facilmente. Aliás, nós vamos agora dar mais uma modificada no script para melhor manutenção do mesmo. Vamos criar uma variável que vai ficar exposta para nós no Inspector, a qual vamos poder modificar facilmente. E é ela que vai cuidar da velocidade final da nossa pequena estaca branca!

Se prepare para escrever no seu código, logo acima da função Start(). Escreva aí: public float Velocidade; . E agora, mais uma modificaçãozinha naquela linha do Input! Vai ficar assim ó:

transform.position += new Vector3 (0, Input.GetAxisRaw ("Vertical") * Velocidade * Time.deltaTime, 0);

E o script inteiro, até o momento é para estar assim:

using UnityEngine;
using System.Collections;

public class players : MonoBehaviour {

    public float Velocidade;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        transform.position += new Vector3 (0, Input.GetAxisRaw ("Vertical") * Velocidade * Time.deltaTime, 0);
    }
}

Agora salve o script e vá para o Unity. Selecione o seu personagem, a nossa simpática estaca branca. Veja suas propriedades no Inspector e repare no componente players (o script) há um novo campo chamado Velocidade que tem o valor 0 (ZERO) por enquanto.

Unity 3d

Pode por a velocidade que você quiser! Modifique a vontade! Vá a loucura! Teste vários valores nesse campo, e ache o qual te deixa mais confortável quanto à velocidade do nosso player 1. Viu como a coisa é mais simples do que parece? Eu sei que posso ter te dado um sustinho antes, mas programação não é um bicho de 7 cabeças. Pode ficar muito confuso, mas tudo tem lógica! E quando você entender a lógica, a coisa fica tranquila!

E por agora é isso. A gente se vê na próxima parte!

PARTE 6

Avalie e compartilhe este post!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *