Menu
CoddyTech

Liczby zmiennoprzecinkowe i Mathf

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

W lekcji „Ułamki dziesiętne wymagają f” poznano f: C# odczytuje 0.5 jako double, a Unity wykonuje obliczenia w float. To samo dzieje się z obliczeniami matematycznymi. System.Math działa na liczbach typu double, więc float s = Math.Sin(x); powoduje błąd CS0266: Cannot implicitly convert type 'double' to 'float'.

Unity ma wersję typu float: Mathf, z elementami Mathf.Sin, Mathf.Abs, Mathf.Sqrt i Mathf.PI. Ta kołysząca się boja powodowała oba błędy, a po zmianie kod się kompiluje:

// przed zmianą: 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ść int zmienia się w float bez żadnej utraty precyzji.

challenge icon

Wyzwanie

Łatwy

Spraw, aby skrypt serca kompilował się i znów pulsował.

  1. W wierszu size zmień Math.Abs i Math.Sin na Mathf.Abs i Mathf.Sin.
  2. Zmień 0.5 na 0.5f i pozostaw resztę wzoru bez zmian.

Naciśnij „Graj”: serce powiększa się od 1 do 1.5 i z powrotem, mniej więcej raz na sekundę. Następnie naciśnij „Sprawdź”.

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);
    }
}

Wszystkie lekcje w sekcji Podstawy skryptów w Unity

Poćwicz samodzielnie: Edytor online Unity