Liczby zmiennoprzecinkowe i Mathf
Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 9 z 67.
Unity używa typu float: pozycje, prędkości, kąty i Time.deltaTime to wartości typu float. C# odczytuje 0.5 jako double i nie przekształci double na float bez wyraźnego polecenia, ponieważ mogłoby to spowodować utratę precyzji. W niemal każdym z pierwszych skryptów początkującego pojawiają się z tego powodu dwa błędy kompilacji:
float half = 0.5;powoduje błądCS0664: Literal of type double cannot be implicitly converted to type 'float'; use an 'F' suffix.float s = Math.Sin(x);powoduje błądCS0266: Cannot implicitly convert type 'double' to 'float', ponieważSystem.Mathdziała na wartościach typu double.
Rozwiązania: zapisuj literały typu float z sufiksem f i używaj Mathf — wersji Math dla typu float w Unity (Mathf.Sin, Mathf.Abs, Mathf.Sqrt, Mathf.PI). Ten skrypt kołyszącej się boi powodował oba błędy, a po zmianie kompiluje się:
// przed: 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);Liczby całkowite, takie jak 1 i 2, nie wymagają sufiksu: wartość typu int można przekształcić na float bez żadnej utraty.
Wyzwanie
ŁatwySerce powinno pulsować: jego rozmiar zmienia się od 1 do 1.5 i z powrotem, trzy razy na sekundę, tak samo na każdej osi. Skrypt się nie kompiluje. Napraw błędy związane z operacjami matematycznymi na liczbach float w Unity i zachowaj ten sam wzór.
Naciśnij Play, aby zobaczyć błędy w konsoli, napraw je, a następnie naciśnij Check.
Spróbuj swoich sił
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);
}
}
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
1Twój pierwszy skrypt
Witaj, UnityUmieść sześcianPoruszaj się w każdej klatceObracaj się co sekundęSteruj za pomocą klawiszyPodsumowanie: Prowadź sześcian2Inspektor
Pola inspektoraSerializeFieldLiczby zmiennoprzecinkowe i MathfAtrybuty inspektoraPodsumowanie: Winda5Transformacje i hierarchia
Rodzice i dzieciSkalaPatrz na obiektyPoruszanie się w kierunku punktuPodsumowanie: Księżyc krążący po orbicie3Wejście
Naciśnięty, przytrzymany, zwolnionyOsiePrzyciski o nazwachPrzyciski myszyPowtórka: naładowany skok6Obiekty gry i komponenty
Referencje w InspectorzePobieranie komponentuBrakujące komponentyDodawanie komponentuRequireComponentPokazywanie i ukrywaniePodsumowanie: włącznik światła