Floats und Mathf
Teil des Abschnitts Grundlagen des Scripting in Unity der Unity-Journey von Coddy. Lektion 9 von 67.
Unity rechnet mit float: Positionen, Geschwindigkeiten, Winkel und Time.deltaTime sind allesamt Floats. C# interpretiert 0.5 als double und wandelt einen Double-Wert nicht ohne ausdrückliche Angabe in einen Float um, da dabei Präzision verloren gehen könnte. Bei den ersten Skripten von Anfängern führen zwei Dinge fast immer zu Compilerfehlern:
float half = 0.5;führt zuCS0664: Literal of type double cannot be implicitly converted to type 'float'; use an 'F' suffix.float s = Math.Sin(x);führt zuCS0266: Cannot implicitly convert type 'double' to 'float', weilSystem.Mathmit Doubles arbeitet.
Die Lösungen: Schreibe Float-Literale mit f und verwende Mathf, Unitys Float-Version von Math (Mathf.Sin, Mathf.Abs, Mathf.Sqrt, Mathf.PI). Bei dieser schaukelnden Boje traten beide Fehler auf; mit der folgenden Änderung lässt sie sich kompilieren:
// vorher: float y = 1 + Math.Sin(Time.time * 2) * 0.5;
float y = 1 + Mathf.Sin(Time.time * 2) * 0.5f;
transform.position = new Vector3(0, y, 0);Ganze Zahlen wie 1 und 2 brauchen keinen Suffix: Ein int wird ohne Genauigkeitsverlust in einen Float umgewandelt.
Aufgabe
EinfachDas Herz sollte pulsieren: Seine Größe steigt von 1 auf 1.5 und wieder zurück, dreimal pro Sekunde, auf jeder Achse gleich. Das Skript lässt sich nicht kompilieren. Behebe die Fehler mit der Fließkomma-Mathematik von Unity und behalte die Formel bei.
Klicke auf Play, um die Fehler in der Console zu sehen, behebe sie und klicke dann auf Check.
Probier es selbst
using System;
using UnityEngine;
public class Pulse : MonoBehaviour
{
void Update()
{
float size = 1 + Math.Abs(Math.Sin(Time.time * 3)) * 0.5;
transform.localScale = new Vector3(size, size, size);
}
}
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