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
- Quaternion startAngle = yourObject.rotation;
- Quaternion targetAngle = startAngle + Quaternion.Euler (180, 0, 0);
- 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.
- while (Time.time - startTime < 2) {
- yourObject.rotation = Quaternion.Lerp (startAngle, targetAngle, (Time.time - startTime) / 2);
- 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.
- yourObject.rotation = targetAngle;
And that’s it! Your object should now rotate smoothly between two angles.
Artigos semelhantes
- Como instanciar e destruir um objeto de jogo em Unidade
- Como em vídeos onde a distorção de pixels está acontecendo, os pixels distorcidos acompanham o movimento do objeto?
- Por que eu recebo "objeto numpy.ndarray não tem erro de atributo em anexo"?
- Quais são as diferenças entre Código de Máquina, Código de Byte, Código de Objeto e Código Fonte?