Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos I / Aula
EITA! Quanto código interessante e quanta informação em uma só linha! Vamos discutir os detalhes.
Primeiramente, temos dois vetores que indicam a posição inicial e a posição final entre as quais a plataforma deve se locomover. Logo no Awake, assim que a plataforma é criada, definimos o ponto inicial como o ponto no qual ela se encontra, e o ponto final como um ponto deslocado movingDist unidades para a direita. Até aí, tudo bem. Já conhecemos a constante Vector3.right e sabemos lidar com posições. O FixedUpdate é que vem cheio de novidades!
No FixedUpdate, a cada atualização, modificamos a posição de nossa plataforma de acordo com vários parâmetros. O método Vector3.Lerp faz uma interpolação linear entre dois pontos. Quando fazemos uma interpolação linear, quebramos uma distância qualquer (no caso, startPosition e endPosition) em passos menores, os quais podem ocorrer a cada atualização do FixedUpdate. Assim, temos a impressão de a movimentação ser contínua, e não só um teletransporte do ponto inicial ao ponto final.
Mas qual é o passo que utilizaremos para quebrar essa distância? Bem, nesse caso, utilizaremos um passo a partir da biblioteca Mathf, chamado PingPong. Esse método varia o primeiro valor passado a ele, de modo a nunca ser maior que o segundo valor passado e nunca ser menor que zero. Ou seja, partiremos de um valor X e chegaremos até o valor 1f, retornando ao valor 0f, em seguida.
E quem é esse valor X? É o resultado da divisão de Time.timeSinceLevelLoad por secs, uma variável indicadora do tempo, em segundos, que a animação durará. Já a constante timeSinceLevelLoad é uma constante que mede, em segundos, quanto tempo faz que a nossa cena foi carregada.
Ou seja, imagine que nos moveremos, andando de um ponto A a um ponto B. Precisaremos levar secs segundos para fazer esse caminho. Qual o tamanho do passo a ser dado? É exatamente isso que está sendo feito no FixedUpdate. Estamos indicando que a plataforma deve se mover do ponto startPosition até o ponto endPosition com passos do tamanho PingPong(Time.timeSinceLevelLoad/secs, 1f). E não é só isso! Para garantir serem considerados, quando próximo às bordas, a aceleração inicial e o freio final, utilizaremos o método SmoothStep. Com isso, quando estivermos próximos ao início e ao final, os passos serão menores, para dar a impressão de aceleração e freio. Muito interessante, não?
É um pouco complicado também, concordo. Mas leia e releia essa parte algumas vezes, que as coisas farão sentido. E pode usar o fórum, caso ainda fique alguma dúvida! Vejamos o resultado dessa movimentação na Figura 11.
Percebe como há uma impressão de haver uma aceleração inicial e um freio, ao final? Isso se deve ao SmoothStep! Já esse comportamento de ir e voltar, parecendo que há uma movimentação contínua, se deve à variação do método PingPong, utilizado junto ao método Lerp. Super interessante, não? E funcional!
Versão 5.3 - Todos os Direitos reservados