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;produceCS0664: Literal of type double cannot be implicitly converted to type 'float'; use an 'F' suffix.float s = Math.Sin(x);produceCS0266: Cannot implicitly convert type 'double' to 'float', porqueSystem.Mathtrabaja 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.
Desafío
FácilEl 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);
}
}
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
1Tu primer script
Hola, UnityColoca el cuboMuévete en cada fotogramaGira cada segundoDirige con las teclasRepaso: conduce el cubo4Vectores
Sumar vectoresDireccionesEspacio local y globalVelocidad diagonalDistancia entre objetosVector3 es una estructuraRepaso: piloto de dron7Proyecto: Atrapa la estrella
El atrapadorUna estrella fugaz10El ciclo de vida de los scripts
Awake y StartUpdate y LateUpdateOnEnable y OnDisableEl orden del ciclo de vidaRepaso: registrador del ciclo de vida2El Inspector
Campos del InspectorSerializeFieldNúmeros decimales y MathfAtributos del InspectorRepaso: Ascensor5Transformaciones y jerarquía
Padres e hijosEscalaMirar objetosMoverse hacia un puntoRepaso: Luna en órbita8Encontrar cosas
Buscar por nombreEtiquetasBuscar por tipoLas referencias superan a FindEl valor nulo de UnityRepaso: la moneda más cercana11Proyecto: Esquiva los bloques
El corredorBloques que caen6GameObjects y componentes
Referencias en el InspectorObtener un componenteComponentes faltantesAñadir un componenteRequireComponentMostrar y ocultarRepaso: interruptor de luz