Menu
CoddyTech

Numeri decimali e Mathf

Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 9 di 67.

Unity conta in float: posizioni, velocità, angoli e Time.deltaTime sono tutti float. C# interpreta 0.5 come un double e non convertirà un double in un float senza che glielo si indichi, perché potrebbe perdere precisione. In quasi tutti i primi script dei principianti, questo causa due errori di compilazione:

  • float half = 0.5; genera CS0664: Literal of type double cannot be implicitly converted to type 'float'; use an 'F' suffix.
  • float s = Math.Sin(x); genera CS0266: Cannot implicitly convert type 'double' to 'float', perché System.Math opera con i double.

Le soluzioni: scrivi i valori letterali float con f e usa Mathf, la versione float di Unity di Math (Mathf.Sin, Mathf.Abs, Mathf.Sqrt, Mathf.PI). Questa boa oscillante causava entrambi gli errori e compila dopo questa modifica:

// prima: 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);

I numeri interi come 1 e 2 non richiedono suffissi: un int diventa un float senza alcuna perdita.

challenge icon

Sfida

Facile

Il cuore dovrebbe pulsare: la sua dimensione passa da 1 a 1,5 e ritorno, tre volte al secondo, allo stesso modo su ogni asse. Lo script non viene compilato. Correggi gli errori usando la matematica sui float di Unity e mantieni invariata la formula.

Premi Play per vedere gli errori nella Console, correggili, poi premi Check.

Provalo tu

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);
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti di scripting in Unity