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'erreurCS0664: Literal of type double cannot be implicitly converted to type 'float'; use an 'F' suffix.float s = Math.Sin(x);provoque l'erreurCS0266: Cannot implicitly convert type 'double' to 'float', carSystem.Mathutilise 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.
Défi
FacileLe 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);
}
}
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
1Votre premier script
Bonjour, UnityPlacez le cubeBouger à chaque imageTourner chaque secondeDirigez avec les touchesRécapitulatif : conduisez le cube4Vecteurs
Addition de vecteursDirectionsEspaces local et mondeVitesse diagonaleDistance entre les objetsVector3 est une structRécapitulatif : pilote de drone7Projet : Attrape l’étoile
L’attrapeurUne étoile qui tombe2L’inspecteur
Champs de l’inspecteurSerializeFieldNombres flottants et MathfAttributs de l’inspecteurRécapitulatif : ascenseur5Transformations et hiérarchie
Parents et enfantsÉchelleRegarder les objetsSe déplacer vers un pointRécapitulatif : Lune en orbite8Rechercher des objets
Rechercher par nomTagsRechercher par typeLes références plutôt que FindLe null de UnityRécapitulatif : la pièce la plus proche11Projet : Esquivez les blocs
Le coureurBlocs qui tombent6GameObjects et composants
Références dans l’InspectorObtenir un composantComposants manquantsAjouter un composantRequireComponentAfficher et masquerRécapitulatif : interrupteur