Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos II / Aula
Vamos agora revisar o script que criamos. MoverPlataforma tem cinco variáveis, são elas:
Observe o método Start() abaixo:
Repare que nele definimos o valor de quatro variáveis. Primeiramente, queremos guardar as posições dos GameObjects PosicalInicial e PosicaoFinal nas variáveis posicaoInicial e posicaoFinal respectivamente (que são do tipo Vector3). Como não criamos uma referência aos GameObjects filhos no script, utilizaremos uma técnica de pegar essa referência pelo seu nome. Para isso, usaremos o transform.FindChild(), o qual recebe o nome do GameObject filho que está sendo buscado como parâmetro. O retorno do FindChild() é o transform do GameObject para o qual passamos o nome, e dele queremos recuperar a posição, por isso utilizamos o seguintes comandos para os dois GameObjects filhos do PlataformaMovel:
Ainda no método start, utilizamos o comando destinoAtual = posicalFinal; para determinar que a princípio a Plataforma deve se mover em direção à posicaoFinal. Da mesma forma, determinamos que inicialmente voltando = false, ou seja, como a Plataforma inicia indo para a posicaoFinal, então ela não está “voltando” ainda.
No começo do método Update() temos os comandos:
Primeiramente, dizemos que a variável “movimento” corresponderá à velocidade que escolhemos multiplicada pelo tempo passado desde o último frame exibido na tela, sendo esse tempo sempre armazenado em Time.deltaTime. Essa é uma prática muito comum para ter uma física, independentemente da taxa de atualização dos frames do jogo. A variável “movimento” é do tipo float e guarda o quanto a plataforma deve se mover nesse frame atual (mas não ainda para onde ela se move).
Em seguida, com o comando transform.position = Vector3.MoveTowards (transform.position, destinoAtual, movimento); determinamos que a nova posição de PlataformaMovel (transform.position) será alterada e receberá um novo valor correspondente justamente à posição do ponto que está entre a plataforma e o destino, porém somente a uma distância da plataforma do tamanho da variável “movimento”. O Vector3.MoveTowards faz exatamente isto: recebe duas posições (a da plataforma e a do destino), além de uma certa quantidade de unidades a se mover (variável movimento), e retorna um novo Vector3 que representa esse passo em direção ao destino. Isso faz a plataforma efetivamente “andar” em direção ao destino um pouco a cada frame.
Ainda no método Update() temos o restante dos comandos como a seguir:
O trecho de código acima inicialmente calcula a distância da Plataforma até o destinoAtual utilizando o Vector3.Distance(), o qual recebe dois Vector3 como parâmetro e retorna a distância entre eles. Logo em seguida, é feita uma verificação sobre se distanciaAoDestino é menor que 0.1, ou seja, se o objeto chegou ao destino e é o momento de alternar a direção do movimento. É importante fazer essa verificação considerando uma certa margem de erro (+- 0.1), pois às vezes o objeto pode “passar direto” do seu destino, sem nunca ter ficado exatamente sobre ele, já que a física do jogo é calculada em intervalos frame a frame. Caso seja verdade que o objeto chegou ao destino, então se verifica se ele estava indo em direção ao Início ou ao Final com o comando if (voltando). Em cada caso se realiza a troca das variáveis voltando e destinoAtual: se ele está voltando, então a variável voltando agora é igual a false e o destinoAtual = posicaoFinal, caso contrário então a variável voltando agora é igual a true e o destinoAtual = posicaoInicial.
Versão 5.3 - Todos os Direitos reservados