Menu
CoddyTech

Ruotalo ogni secondo

Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 11 di 85.

transform.Rotate(x, y, z) ruota un GameObject di altrettanti gradi attorno a ciascuno dei suoi assi. Se viene chiamato in Update(), lo ruota un po' a ogni fotogramma, quindi l'oggetto continua a girare.

Ma quanti fotogrammi ci sono in un secondo? Su un computer veloce magari 120, su un telefono magari 30. Un semplice transform.Rotate(0, 0, 5) ruoterebbe quattro volte più velocemente sul computer più veloce. La risposta di Unity è Time.deltaTime: i secondi trascorsi dall'ultimo fotogramma. Moltiplica una velocità per questo valore e la velocità sarà espressa al secondo, su qualsiasi dispositivo.

Qui una ruota gira attorno al suo asse z, di 45 gradi al secondo:

public float speed = 45f;

void Update()
{
    transform.Rotate(0, 0, speed * Time.deltaTime);
}

A 60 fotogrammi al secondo, Time.deltaTime è circa 0.0167, quindi a ogni fotogramma la ruota gira di 45 * 0.0167, cioè circa 0.75 gradi, e 60 rotazioni di questo tipo fanno 45. A 30 fotogrammi al secondo, la ruota gira il doppio a ogni fotogramma, ma in un secondo il totale è sempre 45.

challenge icon

Sfida

Facile

Fai ruotare il cubo attorno al suo asse y a speed gradi al secondo.

  1. In Update(), chiama transform.Rotate(x, y, z).
  2. Inserisci speed * Time.deltaTime nel numero centrale, per y, e 0 per x e z. La ruota qui sopra ruotava attorno a z; questo cubo ruota attorno a y.

Premi «Gioca»: il cubo compie un quarto di giro ogni secondo. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class Spinner : MonoBehaviour
{
    public float speed = 90f;

    void Update()
    {
        // Ruota qui il cubo attorno al suo asse y
    }
}

Tutte le lezioni di Fondamenti di scripting in Unity

Esercitati da solo: Playground Unity