Menu
CoddyTech

Números decimales y Mathf

Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 9 de 67.

Unity cuenta en float: las posiciones, las velocidades, los ángulos y Time.deltaTime son todos valores float. C# interpreta 0.5 como un double y no convierte un double en un float sin que se lo indiques, porque podría perder precisión. De aquí provienen dos errores de compilación en los primeros scripts de casi todos los principiantes:

  • float half = 0.5; produce CS0664: Literal of type double cannot be implicitly converted to type 'float'; use an 'F' suffix.
  • float s = Math.Sin(x); produce CS0266: Cannot implicitly convert type 'double' to 'float', porque System.Math trabaja con doubles.

Las soluciones: escribe los literales float con f y usa Mathf, la versión float de Unity de Math (Mathf.Sin, Mathf.Abs, Mathf.Sqrt, Mathf.PI). Esta boya oscilante fallaba con ambos errores y compila después de aplicar este cambio:

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

Los números enteros como 1 y 2 no necesitan sufijo: un int se convierte en float sin pérdida alguna.

challenge icon

Desafío

Fácil

El corazón debe latir: su tamaño pasa de 1 a 1.5 y vuelve, tres veces por segundo, igual en cada eje. El script no compila. Corrige los errores relacionados con las operaciones matemáticas con float de Unity y mantén la misma fórmula.

Pulsa Play para ver los errores en la Console, corrígelos y después pulsa Check.

Pruébalo tú mismo

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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos de scripting en Unity