Em uma corrotina, estou definindo a velocidade de um corpo rígido para seguir a localização da tela de toque:
rb.velocity = direction * touchDragPhysicsSpeed;
Mas eu também quero que sua rotação tenda de volta para zero graus. Como posso fazer isso?
A IA continua me dizendo para fazer algo assim:
Quaternion targetRotation = Quaternion.Euler(Vector3.zero);
rb.MoveRotation(Quaternion.Slerp(rb.rotation, targetRotation, rotationCorrectionSpeed));
Mas essa linha MoveRotation dá o erro:
Argumento 1: não é possível converter de 'float' para 'UnityEngine.Quaternion'
Essa é a abordagem correta? Se sim, como posso corrigir o erro? Ou há uma maneira melhor?
Parece que o seu
rb
é, na verdade, umRigidbody2D
, em que, de fato,rb.rotation
é umfloat
(a rotação única do eixo Z - a única que importa para 2D)!você prefere querer
Como você deseja girar em direção ao múltiplo mais próximo de 360
Isso deve girar o caminho mais curto para o múltiplo mais próximo de 360.
Dica geral: em vez de confiar cegamente na IA, consulte a API ;)
Da documentação da Unity - Scripting API para Quaternion.Euler , você não pode passar
Vector3.zero
como argumento porque floats são esperados para ângulos de rotação ao longo dos 3 eixos. Você passou um Quaternion, que neste caso éVector3.zero
.Passe os valores separadamente em vez de
Vector3.zero
.