Skalierung
Teil des Abschnitts Grundlagen des Scripting in Unity der Unity-Journey von Coddy. Lektion 25 von 67.
transform.localScale multipliziert die Größe eines Objekts entlang jeder seiner Achsen. Ein Standardwürfel ist auf jeder Seite 1 Einheit groß, daher ist ein Würfel mit localScale (4, 1, 0.5) 4 Einheiten breit, 1 Einheit hoch und eine halbe Einheit tief. Für eine gleichmäßige Größe multiplizierst du Vector3.one, also (1, 1, 1). Diese Seifenblase wächst um 0.3 pro Sekunde, bis sie 3 Einheiten breit ist:
public float size = 1f;
void Update()
{
size = Mathf.Min(size + 0.3f * Time.deltaTime, 3f);
transform.localScale = Vector3.one * size;
}Mathf.Min(a, b) gibt die kleinere der beiden Zahlen zurück. Daher wächst size, bis der Wert 3 erreicht ist, und bleibt dann bei 3.
Die Skalierung erfolgt um den Drehpunkt des Objekts, der bei den integrierten Formen von Unity in der Mitte liegt. Ein 1 Einheit großer Würfel, der auf dem Boden steht, hat seinen Mittelpunkt bei y = 0.5. Skalierst du ihn auf 3 Einheiten Höhe, reicht er von dort aus 1.5 nach oben und 1.5 nach unten, sodass die Hälfte im Boden versinkt. Damit er auf dem Boden steht, muss sich sein Mittelpunkt auf der halben Höhe befinden: y = 1.5.
Die Größe eines untergeordneten Objekts wird mit der seines übergeordneten Objekts multipliziert: Ein untergeordnetes Objekt mit localScale (1, 1, 1) wird doppelt so groß dargestellt, wenn sein übergeordnetes Objekt um den Faktor 2 skaliert ist. transform.lossyScale gibt diese endgültige Größe in der Welt zurück und ist schreibgeschützt; localScale ist der Wert, den du festlegst.
Aufgabe
MittelDer Eiswürfel schmilzt. Von Beginn des Spiels an schrumpft er pro Sekunde auf jeder Achse um melt (0.2), von seiner Größe 1 auf 0.4, und behält dann diese Größe bei.
Wenn er um seinen Mittelpunkt schrumpfen würde, würde er schweben. Halte deshalb während der gesamten Zeit seine Unterseite auf dem Boden (bei y = 0). Sein x und z ändern sich nicht.
Drücke auf Play, um ihn schmelzen zu sehen, und dann auf Check.
Probier es selbst
using UnityEngine;
public class Melt : MonoBehaviour
{
public float melt = 0.2f;
void Update()
{
// Pro Sekunde um melt verkleinern, bis auf 0.4, wobei die Unterseite auf dem Boden bleibt
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen des Scripting in Unity
1Dein erstes Skript
Hallo, UnityPlatziere den WürfelBewege dich in jedem FrameDrehe dich jede SekundeSteuere mit den TastenRückblick: Steuere den Würfel4Vektoren
Vektoren addierenRichtungenLokaler und globaler RaumDiagonale GeschwindigkeitAbstand zwischen ObjektenVector3 ist ein StructRückblick: Drohnenpilot7Projekt: Fang den Stern
Der FängerEin fallender Stern10Der Lebenszyklus eines Skripts
Awake und StartUpdate und LateUpdateOnEnable und OnDisableDie Reihenfolge im LebenszyklusRückblick: Lifecycle Logger5Transformationen und Hierarchie
Eltern und KinderSkalierungDinge ansehenAuf einen Punkt zubewegenRückblick: Umlaufender Mond8Dinge finden
Nach Namen findenTagsNach Typ findenReferenzen schlagen FindUnitys NullRückblick: Nächste Münze11Projekt: Weiche den Blöcken aus
Der LäuferFallende Blöcke6GameObjects und Komponenten
Referenzen im InspectorEine Komponente abrufenFehlende KomponentenEine Komponente hinzufügenRequireComponentEin- und AusblendenRückblick: Lichtschalter