Menu
CoddyTech

Escala

Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 33 de 85.

transform.localScale multiplica el tamaño de un objeto a lo largo de cada uno de sus ejes. Un cubo predeterminado mide 1 unidad por cada lado, así que un cubo con localScale (4, 1, 0.5) mide 4 unidades de ancho, 1 de alto y media unidad de profundidad. Para un tamaño uniforme, multiplica Vector3.one, que es (1, 1, 1). Esta burbuja de jabón crece 0.3 por segundo hasta medir 3 unidades de ancho:

public float size = 1f;

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

Mathf.Min(a, b) devuelve el menor de sus dos números, así que size crece hasta llegar a 3 y después se queda en 3.

La escala se aplica alrededor del pivote del objeto, que en las formas integradas de Unity está en el centro. Un cubo de 1 unidad apoyado en el suelo tiene el centro en y = 0.5. Al escalarlo hasta que mida 3 unidades de alto, llega hasta 1.5 por encima y 1.5 por debajo de ese punto, así que la mitad se hunde en el suelo. Para apoyarse en el suelo, su centro debe estar a la mitad de su altura: y = 1.5.

El tamaño de un hijo se multiplica por el de su padre: un hijo con localScale (1, 1, 1) bajo un padre escalado por 2 se dibuja el doble de grande. transform.lossyScale lee ese tamaño final en el mundo y es de solo lectura; localScale es el que estableces.

challenge icon

Desafío

Intermedio

Reduce el cubo de hielo hasta 0.4, manteniéndolo en el suelo.

  1. Añade un campo float size = 1f;. En Update(), establece size = Mathf.Max(size - melt * Time.deltaTime, 0.4f);.
  2. Establece transform.localScale = Vector3.one * size;.
  3. Mantén la parte inferior en y = 0: establece la coordenada y de la posición en size / 2, manteniendo x y z.

Pulsa «Jugar»: el cubo se encoge y permanece en el suelo. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;

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

    void Update()
    {
        // Encoge melt por segundo hasta llegar a 0.4, manteniendo la parte inferior sobre el suelo
    }
}

Todas las lecciones de Fundamentos de scripting en Unity

Practica por tu cuenta: Playground de Unity