Menu
CoddyTech

Skala

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

transform.localScale mnoży rozmiar obiektu wzdłuż każdej z jego osi. Domyślnny sześcian ma 1 jednostkę długości każdego boku, więc sześcian o 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 osiach, 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 następnie pozostaje na tym poziomie.

Skalowanie odbywa się względem punktu obrotu obiektu, który w przypadku wbudowanych kształtów Unity znajduje się w środku. Sześcian o boku 1 jednostki, stojący na podłożu, ma środek na wysokości y = 0.5. Jeśli przeskalujesz go do wysokości 3 jednostek, będzie sięgał 1.5 jednostki w górę i 1.5 w dół od tego punktu, więc połowa sześcianu zapadnie się w podłoże. Aby stał na podłożu, 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 o localScale (1, 1, 1), którego obiekt nadrzędny ma skalę 2, jest renderowany jako dwukrotnie większy. transform.lossyScale odczytuje ten końcowy rozmiar w świecie i jest tylko do odczytu; wartość, którą ustawiasz, to localScale.

challenge icon

Wyzwanie

Średni

Kostka lodu topnieje. Od początku gry kurczy się na każdej osi o melt (0.2) na sekundę, od rozmiaru 1 do 0.4, a potem pozostaje w tym rozmiarze.

Kurczenie wokół środka sprawiłoby, że kostka unosiłaby się w powietrzu, więc przez cały czas utrzymuj jej spód na ziemi (przy y = 0). Jej współrzędne x i z się nie zmieniają.

Naciśnij Play, aby zobaczyć, jak topnieje, a następnie Check.

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 dolną krawędź na ziemi
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy skryptów w Unity