Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Alguém me explica uma lógica.

Bom dia, então estou vendo as aulas de unity 2d e não consegui compreender a lógica de usar esse código:

 void Update () {

      float deslocamento = Mathf.Repeat(this.velocidade * Time.time, this.tamanhaRealImagem);
        this.transform.position = this.posicaoInicial + Vector3.left * deslocamento;

    }

E esse usando um Time diferente e obtendo a msm velocidade.

void Update () {
        this.transform.Translate(Vector3.left * this.velocidade * Time.deltaTime);
    }

Melhor dizendo, não consegui entender a lógica que faz esses dois métodos Time, obter valores de tempos diferente mas resultar no final uma velocidade igual para o cenário e o obstáculo.

1 resposta
solução!

Olá Rafael,

Vamos começar pelo Update() do obstáculo. Nesse primeiro caso, queremos apenas que o obstáculo se movimente do lado direito da tela para o lado esquerdo. A cada quadro do jogo, apenas deslocamos o obstáculo para a esquerda de acordo com o tempo que passou desde o último quadro (Time.deltaTime).

Já no Update() do cenário, usamos uma única imagem em loop para simular que o cenário é infinito. Perceba que queremos usar uma única imagem que caminha para fora da tela e quando ela já andou o tamanho da tela inteiro, aí fazemos ele voltar para a posição inicial de modo que o jogador não perceba esse movimento. Dessa forma, o efeito que obtemos é o de que o cenário é de fato infinito.

Para simular esse efeito, precisamos calcular o deslocamento do cenário e se ele tiver passado do tamanho da tela, precisamos voltar ele pra posição inicial. Por esse motivo utilizamos o método Mathf.repeat. Esse método vai receber a posição atual do cenário e a largura da tela. Se o deslocamento do cenário for maior ou igual a largura da tela, esse método vai reposicionar o cenário dentro da tela novamente para que possamos começar novamente o movimento do cenário.