Cómo importar una hoja de sprites en Godot

Godot 4 lee una hoja de sprites de tres formas diferentes, y elegir mal puede obligarte a rehacer dos veces la configuración de animación. Esta guía explica AnimatedSprite2D con SpriteFrames, regiones de AtlasTexture y el atajo hframes/vframes en un Sprite2D sencillo: para qué sirve cada uno y qué hacer cuando tu hoja no tiene una cuadrícula real.

Importar la textura en el proyecto

Godot importa recursos observando el sistema de archivos. Copia tu PNG en cualquier ubicación del directorio del proyecto y aparecerá en el panel FileSystem, con un .import creado junto a él. Nunca lo editas a mano: cambias ajustes en Import y pulsas Volver a importar.

Antes de nada, configura el filtrado, porque es el ajuste más visible para pixel art. En Godot 4 el filtro de textura está en el nodo, no en la importación, dentro de CanvasItem → Texture → Filter. Configúralo en Nearest y los bordes de píxeles siguen definidos. Configurarlo por nodo resulta tedioso; cambia el valor predeterminado del proyecto: Project Settings → Rendering → Textures → rendering/textures/canvas_textures/default_texture_filter → Nearest. Cada CanvasItem que siga en Inherit lo detecta después.

Godot 3 frente a Godot 4: en Godot 3 el filtro era una opción de importación por textura. En Godot 4 pasó al nodo y al proyecto. Por eso no encuentras la casilla de tutoriales antiguos.

Mientras estés en el panel Import, deja Mipmaps desactivado para sprites 2D cerca de su tamaño real; Godot 4 solo comprime a formatos VRAM cuando eliges VRAM Compressed. El valor predeterminado Lossless es el que necesitas para pixel art; la compresión VRAM introduce precisamente los bloques que más se notan en colores planos.

Método 1: AnimatedSprite2D y SpriteFrames

Es la ruta para cualquier contenido animado y el punto de partida de la mayoría de los proyectos. AnimatedSprite2D es un nodo que contiene un SpriteFrames recurso: colección nombrada de animaciones, cada una con texturas ordenadas, FPS y opción de bucle.

  1. Añade un AnimatedSprite2D a tu escena.
  2. En Inspector, haz clic en el Sprite Frames propiedad y elige New SpriteFrames. Se abre un panel SpriteFrames en la parte inferior del editor.
  3. Renombra la animación predeterminada de default a algo significativo — walk, idle. Harás referencia a estas cadenas desde el código.
  4. Añade fotogramas con uno de los dos botones de la barra de herramientas: Añadir fotogramas desde una hoja de sprites (el icono de cuadrícula) o Añadir fotogramas desde archivos (el icono de archivo).
  5. Define los FPS y el interruptor de bucle y reproduce en el panel para comprobar el ritmo antes de conectar código.

Añadir fotogramas desde una hoja de sprites

Al elegir el icono de cuadrícula se abre un diálogo donde seleccionas el PNG y describes su distribución: Horizontal y Vertical recuentos, además de Separation y Offset si hay márgenes o huecos. La vista previa se actualiza y después seleccionas celdas en el orden deseado. Mayús-clic selecciona un rango.

Dos detalles: el orden de selección determina el de fotogramas, así que seleccionar desordenado reproduce desordenado. Además, este diálogo supone una cuadrícula uniforme, como Grid By Cell Count de Unity. No detecta contenido ni tiene equivalente a Automatic. Si no hay cuadrícula real, no puede salvarla.

Añadir fotogramas desde archivos

Selecciona varios PNG individuales y se convertirán en fotogramas según el orden alfabético de Godot. Completa los números de los nombres con ceros iniciales: walk_01.png mediante walk_12.png — o el fotograma 10 queda justo después del 1. Es la vía más fácil de configurar y por eso dividir previamente en archivos suele ser más cómodo en Godot.

Método 2: regiones de AtlasTexture

Un AtlasTexture es un recurso que apunta a una región de una textura grande y se comporta como textura independiente donde Godot la admite. Se crea poniendo una propiedad de textura en New AtlasTexture, asignando la hoja a su atlas propiedad, y escribir el region rectángulo (x, y, ancho, alto).

Es la opción más flexible y manual. Resulta útil si los sprites están en posiciones arbitrarias, varios nodos necesitan distintas partes de una textura o generas regiones desde datos en código:

  • Un tema de interfaz que extrae piezas nine-patch e iconos de una textura compartida.
  • Un conjunto de piezas o catálogo de objetos donde un script crea AtlasTextures a partir de un manifiesto JSON exportado junto con la hoja.
  • Sprites estáticos puntuales para los que crear otro archivo parece excesivo.

El filter_clip propiedad merece atención: activarla evita muestrear fuera de la región y corrige la franja del sprite vecino en el borde.

Método 3: hframes y vframes en Sprite2D

Un simple Sprite2D tiene tres propiedades que le permiten leer una hoja sin recursos adicionales: hframes, vframes, y frame. Configura hframes en 4 y vframes en 4, y Godot divide la textura en una cuadrícula de 4×4; configurar frame a un índice de 0 a 15 muestra esa celda.

Es el método más ligero y se anima fácilmente desde una pista de AnimationPlayer sobre el frame propiedad, o desde unas líneas en _process. Para una hoja exportada por una herramienta, realmente es todo lo que necesitas.

hframes y vframes son una división simple. Godot toma el ancho de la textura, lo divide entre hframes y usa el resultado como ancho de celda, sin examinar los píxeles. Si la separación real de tu hoja varía, cada fotograma tiene un desplazamiento cada vez mayor y no hay parámetros de desplazamiento o margen para compensarlo. No existe una variante de este método que gestione una hoja irregular.
Izquierda: una retícula rígida sobre una hoja uniforme donde cada celda contiene un personaje completo, marcada con una verificación verde. Derecha: la misma retícula sobre una hoja irregular cuyas líneas cortan sprites y cuyas celdas contienen figuras parciales, marcada con una X roja
Los mismos valores hframes y vframes aplicados a dos hojas. Godot divide el ancho de la textura entre el número de fotogramas y nada más: no hay parámetros de desplazamiento ni relleno y no se examinan los píxeles.

Por qué las hojas irregulares rompen los tres métodos y cómo corregirlo

Todos los métodos anteriores comparten una suposición: puedes describir la hoja mediante cálculos. Add Frames from Sprite Sheet necesita cantidades. hframes/vframes necesitan cantidades. AtlasTexture necesita rectángulos explícitos, que puedes definir correctamente, pero solo midiendo cada uno a mano.

Los generadores rompen esa suposición. Pedir «un ciclo 4×4» produce aspecto de cuadrícula porque han visto miles, no porque calculen límites. La separación deriva por columna y acumula error; las poses tienen tamaños variables y quedan descentradas. Con hframes en 4, la primera columna parece bien, la segunda algo recortada y la cuarta atraviesa al personaje.

La solución fiable es leer la hoja, no describirla. En fondo transparente, cada píxel es sprite —alfa mayor que cero— o fondo —alfa cero—; las filas y columnas transparentes marcan los límites reales. Corta por el centro de esos huecos y ajusta cada pieza a su contenido: obtendrás fotogramas independientes de cualquier cuadrícula supuesta.

Eso es lo que hace la pestaña Corte mágico de nuestro Divisor de hojas de sprites hace, con varias pasadas de ajuste para separar piezas que aún contienen dos sprites o demasiado relleno. Exporta PNG individuales y cárgalos con Añadir fotogramas desde archivos. Cuando la detección automática tiene dificultades —sprites que se tocan, un resplandor que abarca el lienzo, un personaje con partes separadas—, la pestaña Manual y preajustes permite arrastrar cada línea de la cuadrícula a la separación correcta: seis arrastres para una hoja de dieciséis fotogramas.

Si tu hoja tiene fondo uniforme en lugar de transparencia, pásala por eliminación de fondos primero. Hacerlo una vez sobre toda la hoja es una operación coherente; hacerlo después en dieciséis fotogramas ofrece dieciséis oportunidades de divergencia.

PNG individuales frente a una hoja

Una hojaPNG individuales
Esfuerzo de configuraciónBajo si la cuadrícula es real, alto si noSiempre bajo
Editar un fotogramaVuelve a exportar y dividir la hojaSustituye un archivo
Ordenación de fotogramasOrden de clics en el diálogoOrden por nombre de archivo: añade ceros a la izquierda
Llamadas de dibujoSe agrupa bien por lotes: una texturaMás texturas salvo que se agrupen en atlas
Gestiona distribuciones irregularesNoSí: cada archivo es su propio fotograma

En la mayoría de los proyectos 2D, la diferencia de llamadas de dibujo no es el cuello de botella y gana la comodidad de los archivos individuales. Si llegas a un punto donde los cambios de textura importan, la solución es empaquetar los fotogramas terminados en un atlas como paso de compilación, no crearlos desde el principio como una mega hoja recortada a mano.

Preguntas frecuentes

Mi pixel art se ve borroso en Godot 4. ¿Qué olvidé?

El filtro de textura. Configura rendering/textures/canvas_textures/default_texture_filter en Nearest en Project Settings y revisa Texture Filter del nodo en Inherit, no Linear explícito. Si sigue suave, el viewport puede escalar de forma fraccionaria: revisa stretch y scale en Display → Window.

¿Debo usar AnimatedSprite2D o AnimationPlayer controlando Sprite2D?

AnimatedSprite2D para animaciones sencillas fotograma a fotograma: está diseñado para ello y requiere menos configuración. AnimationPlayer cuando necesites animar otras cosas sincronizadas con los fotogramas: posiciones de cajas de impacto, activación de sonidos, emisión de partículas o visibilidad de nodos. Muchos proyectos terminan usando ambos.

Una pequeña parte del siguiente fotograma aparece en el borde de mi sprite.

Filtración de textura por muestreo fuera de la región. Cambia el filtro a Nearest, activa filter_clip si usas AtlasTexture, y confirma división exacta de celda y textura. Uno o dos píxeles transparentes entre sprites eliminan el problema permanentemente.

¿Puedo cambiar los fotogramas desde el código en lugar de usar el panel de animación?

Sí. En un Sprite2D, asigna al frame propiedad directamente. En un AnimatedSprite2D, llama a play("walk") o configura frame mientras está en pausa. Controlar fotogramas manualmente es habitual en barras de salud basadas en estados de sprites.

Corta primero la hoja en fotogramas

Todos los importadores de Godot suponen una cuadrícula uniforme. Si la tuya no lo es, divídela en el navegador y carga los resultados con Add Frames from File(s). Corte mágico lee el canal alfa; Manual y preajustes te permite colocar tú las líneas. Nada sale de tu equipo.

Abrir Divisor de hojas de sprites