Come ruotare uniformemente un oggetto in Unity
C'è effettivamente una funzione per questo: Quaternion.Lerp.
Lerp sta per Linear Interpolation. La funzione è un po' difficile da capire per la prima volta, quindi cercherò di guidarvi attraverso di essa. Oppure, potreste cercare la documentazione di Unity per essa.
Il primo e il secondo valore inseriti sono gli angoli di inizio e fine. Se, diciamo, vuoi ruotare di 180 gradi sull'asse x, il primo input sarebbe la rotazione originale dell'oggetto, e il secondo sarebbe la rotazione originale dell'oggetto più un angolo che equivale a 180 gradi sull'asse x.
Ora, la terza parte: il valore di fusione. Questo è ciò che determina quale percentuale di ogni angolo viene usata. È un float tra 0 e 1. Mettendo 0 si otterrebbe il primo angolo in uscita, 1 sarebbe il secondo angolo, e qualsiasi valore intermedio è una miscela dei due angoli.
Ora, di solito si desidera che il terzo valore sia legato al tempo che passa in modo che sembri ruotare in modo uniforme. Quindi, ecco un'implementazione di esempio. Supponiamo che la seguente implementazione sia in una Coroutine per semplicità. Vi consiglio di usarne una nel vostro codice.
Prima di tutto, dichiarate gli angoli di inizio e fine. Devi dichiararli come nuove variabili. NON usare la rotazione dell'oggetto in 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. Dovete metterla in un ciclo di qualche tipo in modo che venga eseguita ogni fotogramma. Volete che il ciclo duri per il tempo che volete che l'oggetto ruoti. 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.
Articoli simili
- In Unity, come posso far girare un oggetto mentre è bloccato in posizione?
- Come istanziare e distruggere un oggetto di gioco in Unity
- Se faccio un gioco con Unity craccato, posso metterlo in Google Play? Scopriranno che ho usato Unity craccato? Come?
- Unity vs Unreal 2018, Unreal è ancora significativamente migliore nelle prestazioni? O Unity può ora sviluppare giochi di livello quasi AAA/PS4?