Casa > C > Como Rodar Um Objeto Em Unidade

Como rodar um objeto em Unidade

Existe na verdade uma função para isso: Quaternion.Lerp.

Lerp significa Interpolação Linear. A função é um pouco complicada de se descobrir pela primeira vez, por isso vou tentar guiá-lo através dela. Ou, você pode procurar a documentação da Unidade para isso.

Os primeiro e segundo valores colocados nela são os ângulos de início e fim. Se você, digamos, quiser girar 180 graus no eixo x, a primeira entrada seria a rotação original do objeto, e a segunda seria a rotação original do objeto mais um ângulo que equivale a 180 graus no eixo x.

Agora, a terceira parte: o valor da mistura. Isto é o que determina que percentagem de cada ângulo é usada. É um float entre 0 e 1. Colocando 0 resultaria em que o primeiro ângulo seria o output, 1 seria o segundo ângulo, e qualquer valor no meio seria uma mistura dos dois ângulos.

Agora, normalmente você vai querer que esse terceiro valor esteja relacionado com a passagem do tempo para que pareça girar suavemente. Então, aqui está um exemplo de implementação. Assuma que a seguinte implementação está em um Coroutine por simplicidade. Eu recomendaria usar um em seu código.

Primeiro, declare os ângulos de início e fim. Você tem que declará-los como novas variáveis. NÃO use a rotação do objeto no Quaternion.Lerp. Also declare the blend variable as the currrnt time

  1. Quaternion startAngle = yourObject.rotation; 
  2. Quaternion targetAngle = startAngle + Quaternion.Euler (180, 0, 0); 
  3. float startTime = Time.time; 

Next, the Lerp function. Você tem que colocar esta em algum tipo de loop para que ela execute cada frame. Você quer que esse loop dure o tempo que você quiser que o objeto gire. In my case, I’ll use 2 seconds.

  1. while (Time.time - startTime < 2) { 
  2. yourObject.rotation = Quaternion.Lerp (startAngle, targetAngle, (Time.time - startTime) / 2); 
  3. yield return null; 

Then, here’s a little tip for you: this can’t guarantee that the end result of the object will be exactly correct. So, I like to just set the object’s rotation to the target rotation after the loop.

  1. yourObject.rotation = targetAngle; 

And that’s it! Your object should now rotate smoothly between two angles.

De Ricarda Cynova

Como promover o meu jogo de graça :: O que irá substituir as câmaras digitais?