Menu
CoddyTech

Nombres flottants et Mathf

Fait partie de la section Les bases du scripting dans Unity du Journey Unity de Coddy. Leçon 9 sur 67.

Unity utilise des float : les positions, les vitesses, les angles et Time.deltaTime sont tous des nombres à virgule flottante. C# interprète 0.5 comme un double et ne convertit pas un double en float sans indication, car cela pourrait entraîner une perte de précision. Presque tous les débutants rencontrent ces deux erreurs de compilation dans leurs premiers scripts :

  • float half = 0.5; provoque l'erreur CS0664: Literal of type double cannot be implicitly converted to type 'float'; use an 'F' suffix.
  • float s = Math.Sin(x); provoque l'erreur CS0266: Cannot implicitly convert type 'double' to 'float', car System.Math utilise des doubles.

Pour corriger ces erreurs : écris les littéraux float avec f et utilise Mathf, la version float de Math dans Unity (Mathf.Sin, Mathf.Abs, Mathf.Sqrt, Mathf.PI). Cette bouée oscillante présentait les deux erreurs et compile après cette correction :

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

Les nombres entiers comme 1 et 2 n'ont pas besoin de suffixe : un int est converti en float sans aucune perte.

challenge icon

Défi

Facile

Le cœur doit battre : sa taille passe de 1 à 1.5 puis revient, trois fois par seconde, de la même façon sur chaque axe. Le script ne compile pas. Corrige les erreurs liées aux opérations mathématiques sur les float dans Unity, et conserve la même formule.

Appuie sur Play pour voir les erreurs dans la Console, corrige-les, puis clique sur Check.

Essayez vous-même

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Les bases du scripting dans Unity