Menu
CoddyTech

Skalowanie

Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 33 z 85.

transform.localScale skaluje obiekt wzdłuż każdej z jego osi. Domyślny sześcian ma 1 jednostkę długości z każdej strony, więc sześcian z localScale (4, 1, 0.5) ma 4 jednostki szerokości, 1 jednostkę wysokości i pół jednostki głębokości. Aby uzyskać jednakowy rozmiar we wszystkich kierunkach, pomnóż przez Vector3.one, czyli (1, 1, 1). Ta bańka mydlana rośnie o 0.3 jednostki na sekundę, aż osiągnie 3 jednostki szerokości:

public float size = 1f;

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

Mathf.Min(a, b) zwraca mniejszą z dwóch liczb, więc size rośnie, aż osiągnie 3, a potem pozostaje równe 3.

Skalowanie odbywa się względem punktu obrotu obiektu, który w przypadku wbudowanych kształtów Unity znajduje się w środku. Środek sześcianu o boku 1 jednostki, stojącego na ziemi, znajduje się na wysokości y = 0.5. Zwiększ jego wysokość do 3 jednostek, a będzie sięgać 1.5 jednostki w górę i 1.5 jednostki w dół od tego punktu, więc połowa sześcianu zatonie w ziemi. Aby stał na ziemi, jego środek musi znajdować się na połowie jego wysokości: y = 1.5.

Rozmiar obiektu potomnego jest mnożony przez rozmiar jego obiektu nadrzędnego: obiekt potomny z localScale (1, 1, 1), umieszczony pod obiektem nadrzędnym przeskalowanym dwukrotnie, jest rysowany w dwukrotnie większym rozmiarze. transform.lossyScale odczytuje ten końcowy rozmiar w świecie i jest tylko do odczytu; ustawiasz localScale.

challenge icon

Wyzwanie

Średni

Zmniejsz kostkę lodu do 0.4, utrzymując ją na ziemi.

  1. Dodaj pole float size = 1f;. W Update() ustaw size = Mathf.Max(size - melt * Time.deltaTime, 0.4f);.
  2. Ustaw transform.localScale = Vector3.one * size;.
  3. Utrzymaj spód kostki na wysokości y = 0: ustaw współrzędną y pozycji na size / 2, zachowując x i z.

Naciśnij „Graj”: kostka się kurczy i pozostaje na ziemi. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

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

    void Update()
    {
        // Zmniejszaj rozmiar o melt na sekundę, aż do 0.4, utrzymując spód na ziemi
    }
}

Wszystkie lekcje w sekcji Podstawy skryptów w Unity

Poćwicz samodzielnie: Edytor online Unity