Menu
CoddyTech

Scala

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

transform.localScale moltiplica le dimensioni di un oggetto lungo ciascuno dei suoi assi. Un cubo predefinito misura 1 unità su ogni lato, quindi un cubo con localScale (4, 1, 0.5) è largo 4 unità, alto 1 unità e profondo mezzo unità. Per ottenere dimensioni uniformi, moltiplica Vector3.one, che è (1, 1, 1). Questa bolla di sapone cresce di 0.3 unità al secondo finché non raggiunge 3 unità di larghezza:

public float size = 1f;

void Update()
{
    size = Mathf.Min(size + 0.3f * Time.deltaTime, 3f);
    transform.localScale = Vector3.one * size;
}

Mathf.Min(a, b) restituisce il più piccolo dei due numeri, quindi size cresce finché non raggiunge 3, poi rimane a 3.

La scala agisce attorno al pivot dell'oggetto, che per le forme integrate di Unity si trova al centro. Un cubo di 1 unità appoggiato a terra ha il centro a y = 0.5. Se lo porti a 3 unità di altezza, si estende di 1.5 unità verso l'alto e di 1.5 verso il basso a partire da quel punto, quindi metà del cubo sprofonda nel terreno. Per appoggiarlo a terra, il suo centro deve trovarsi a metà della sua altezza: y = 1.5.

Le dimensioni di un oggetto figlio vengono moltiplicate per quelle del genitore: un figlio con localScale (1, 1, 1) sotto un genitore con scala 2 viene disegnato con dimensioni doppie. transform.lossyScale legge le dimensioni finali nello spazio del mondo ed è di sola lettura; localScale è il valore che imposti.

challenge icon

Sfida

Medio

Fai sciogliere il cubetto di ghiaccio fino a 0.4, mantenendolo a terra.

  1. Aggiungi un campo float size = 1f;. In Update(), imposta size = Mathf.Max(size - melt * Time.deltaTime, 0.4f);.
  2. Imposta transform.localScale = Vector3.one * size;.
  3. Mantieni la base a y = 0: imposta y della posizione su size / 2, mantenendo x e z.

Premi «Gioca»: il cubo si rimpicciolisce e rimane a terra. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class Melt : MonoBehaviour
{
    public float melt = 0.2f;

    void Update()
    {
        // Riduci le dimensioni di melt al secondo, fino a 0.4, mantenendo la base a terra
    }
}

Tutte le lezioni di Fondamenti di scripting in Unity

Esercitati da solo: Playground Unity