Come importare un foglio di sprite in Godot

Godot 4 legge un foglio di sprite in tre modi diversi e scegliere quello sbagliato porta a riscrivere due volte la configurazione dell’animazione. Questa guida tratta AnimatedSprite2D con SpriteFrames, regioni AtlasTexture e la scorciatoia hframes/vframes su un normale Sprite2D: a cosa serve ciascuno e cosa fare quando il foglio non è su una vera griglia.

Inserimento della texture nel progetto

Godot importa risorse osservando il filesystem. Copia il PNG in un punto qualsiasi della cartella del progetto e appare nel pannello FileSystem, con un .import file creato accanto a esso. Non modifichi mai quel file a mano; cambi le impostazioni nel pannello Import e premi Reimporta.

Prima di tutto, occupati del filtraggio, perché è l’impostazione più visibile per la pixel art. In Godot 4 il filtro della texture si trova sul nodo anziché nell’importazione, sotto CanvasItem → Texture → Filter. Impostalo su Nearest e i bordi netti dei pixel restano netti. Impostarlo per ogni nodo diventa presto tedioso, quindi cambia invece l’impostazione predefinita del progetto: Project Settings → Rendering → Textures → rendering/textures/canvas_textures/default_texture_filter → Nearest. Ogni CanvasItem lasciato su Inherit poi lo rileva.

Godot 3 e Godot 4: in Godot 3 il filtro era un’opzione di importazione della texture e veniva attivato per file nel pannello Import. In Godot 4 è stato spostato sul nodo e nelle impostazioni del progetto. Se segui un vecchio tutorial e non trovi la casella, ecco perché.

Mentre ti trovi nel pannello Import, lascia Mipmaps disattivato per gli sprite 2D disegnati vicino alle dimensioni native, e nota che Godot 4 comprime le texture in formati VRAM solo quando scegli VRAM Compressed. Il valore predefinito Lossless modalità è quella adatta alla pixel art; la compressione VRAM introduce proprio gli artefatti a blocchi più evidenti nella grafica a colori uniformi.

Metodo 1: AnimatedSprite2D e SpriteFrames

È il percorso adatto a qualsiasi elemento animato ed è da qui che dovrebbe partire la maggior parte dei progetti. AnimatedSprite2D è un nodo che contiene una SpriteFrames risorsa: una raccolta nominata di animazioni, ciascuna delle quali è un elenco ordinato di texture con un valore di fotogrammi al secondo e un’opzione di ripetizione.

  1. Aggiungi un AnimatedSprite2D alla tua scena.
  2. Nell’Inspector, fai clic su Sprite Frames proprietà e scegli New SpriteFrames. Si apre un pannello SpriteFrames nella parte inferiore dell’editor.
  3. Rinomina l’animazione predefinita da default a qualcosa di significativo — walk, idle. Farai riferimento a queste stringhe dal codice.
  4. Aggiungi fotogrammi con uno dei due pulsanti della barra degli strumenti: Add Frames from Sprite Sheet (l’icona della griglia) oppure Add Frames from File(s) (l’icona del file).
  5. Imposta FPS e ripetizione dell’animazione, poi riproduci nel pannello per controllare i tempi prima di collegare codice.

Add Frames from Sprite Sheet

Scegliendo l’icona della griglia si apre una finestra in cui selezioni il PNG e ne descrivi la disposizione: Horizontal e Vertical conteggi, oltre a Separation e Offset se il foglio ha margini o spazi tra celle. L’anteprima si aggiorna in tempo reale e poi fai clic sulle celle desiderate nell’ordine desiderato. Maiusc+clic seleziona un intervallo.

Due dettagli da conoscere. Primo, l’ordine di selezione diventa l’ordine dei fotogrammi, quindi fare clic sulle celle fuori sequenza produce un’animazione fuori sequenza. Secondo, questa finestra presume una griglia uniforme, esattamente come Grid By Cell Count di Unity. Non ha alcuna modalità di rilevamento del contenuto: non esiste un equivalente del ritaglio Automatic di Unity. Se la griglia non è reale, questa finestra non può rimediare.

Add Frames from File(s)

Seleziona diversi PNG singoli e diventeranno fotogrammi nell’ordine alfabetico di Godot. Aggiungi zeri iniziali ai nomi — walk_01.png tramite walk_12.png — altrimenti il fotogramma 10 finisce immediatamente dopo il fotogramma 1. È il percorso più semplice da impostare correttamente ed è per questo che ritagliare prima un foglio in file è spesso il flusso più agevole proprio in Godot.

Metodo 2: regioni AtlasTexture

Un AtlasTexture è una risorsa che punta a una regione di una texture più grande e si comporta come una texture autonoma ovunque Godot ne accetti una. La crei impostando una proprietà di texture su New AtlasTexture, assegnando il foglio alla sua atlas proprietà e inserendo il region rettangolo (x, y, width, height).

È l’opzione più flessibile e più manuale. È particolarmente utile quando gli sprite necessari si trovano in posizioni arbitrarie, quando più nodi richiedono parti diverse di una sola texture o quando generi le regioni da dati nel codice:

  • Un tema dell’interfaccia che ricava elementi nine-patch e icone da un’unica texture condivisa.
  • Un set di tasselli o catalogo di oggetti in cui uno script crea AtlasTextures da un manifest JSON esportato insieme al foglio.
  • Sprite statici isolati per cui creare un file separato sembra eccessivo.

Il filter_clip proprietà merita di essere conosciuta: attivarla impedisce alla texture di campionare fuori dalla propria regione, risolvendo una sottile striscia dello sprite vicino che contamina un bordo.

Metodo 3: hframes e vframes su Sprite2D

Un semplice Sprite2D ha tre proprietà che gli consentono di leggere un foglio senza alcuna risorsa aggiuntiva: hframes, vframes, e frame. Imposta hframes a 4 e vframes a 4 e Godot divide la texture in una griglia 4×4; impostando frame su un indice da 0 a 15 mostra quella cella.

È l’approccio più leggero e si anima bene da una traccia AnimationPlayer sul frame proprietà oppure tramite un paio di righe in _process. Per un foglio esportato da uno strumento è davvero tutto ciò che ti serve.

hframes e vframes sono pura divisione. Godot prende la larghezza della texture, la divide per hframes e usa il risultato come larghezza della cella, senza esaminare affatto i pixel. Se la spaziatura reale del foglio varia, ogni fotogramma è spostato di una quantità crescente e non c’è un parametro di scostamento o margine che compensi. Nessuna versione di questo metodo gestisce un foglio irregolare.
A sinistra: griglia rigida su un foglio di sprite uniforme con un personaggio completo in ogni cella e una spunta verde. A destra: la stessa griglia su un foglio irregolare, con linee che tagliano sprite e celle con figure parziali, indicata con una X rossa
Gli stessi valori di hframes e vframes applicati a due fogli. Godot divide la larghezza della texture per il numero di fotogrammi e si ferma lì: non esistono parametri di offset o spaziatura e nessuno esamina i pixel.

Perché i fogli irregolari mettono in crisi tutti e tre e come risolvere

Ogni metodo sopra condivide un presupposto: puoi descrivere il foglio aritmeticamente. Add Frames from Sprite Sheet richiede conteggi. hframes/vframes richiedono conteggi. AtlasTexture richiede rettangoli espliciti che puoi definire correttamente, ma soltanto misurandoli uno per uno a mano.

I fogli dei generatori violano quel presupposto. Chiedere “ciclo di camminata 4×4” produce una griglia apparente perché il modello ne ha viste migliaia, non perché calcoli i confini. La spaziatura varia di pochi pixel per colonna e si accumula; dimensioni e centri variano con la posa. Imposta hframes a 4: la prima colonna sembra giusta, la seconda è leggermente tagliata e la quarta taglia il personaggio.

La correzione affidabile è smettere di descrivere il foglio e leggerlo. Su trasparenza ogni pixel è sprite (alfa sopra zero) o sfondo (alfa zero), e righe/colonne completamente trasparenti marcano i confini veri. Taglia al centro di ogni spazio, rifila al contenuto e ottieni fotogrammi indipendenti dalla griglia presunta.

È ciò che fa la scheda Magic Slice nel nostro Ritagliatore di fogli di sprite fa, con alcuni passaggi di rifinitura per individuare pezzi che contengono ancora due sprite o spaziatura eccessiva. Esporta i risultati come PNG singoli e caricali con Add Frames from File(s). Quando il rilevamento automatico incontra difficoltà, per esempio sprite che si toccano, un bagliore esteso sulla tela o un personaggio con parti staccate, la scheda Manuale e preimpostazioni permette di trascinare ogni linea della griglia nello spazio corretto: sei trascinamenti per un foglio di sedici fotogrammi.

Se il foglio ha uno sfondo uniforme anziché trasparenza, passalo in rimozione dello sfondo prima. Farlo una volta sull’intero foglio è una sola operazione con un risultato coerente; farlo su sedici fotogrammi separati dopo significa sedici occasioni di divergenza.

PNG singoli rispetto a un foglio unico

Un foglioPNG singoli
Lavoro di configurazioneBasso se la griglia è reale, alto altrimentiSempre basso
Modifica di un fotogrammaRiesporta e ritaglia di nuovo il foglioSostituisci un file
Ordinamento dei fotogrammiOrdine dei clic nella finestraOrdinamento per nome: aggiungi zeri iniziali
Chiamate di disegnoSi raggruppa bene: una sola texturePiù texture salvo uso di un atlante
Gestisce disposizioni irregolariNoSì, ogni file è un fotogramma a sé

Per la maggior parte dei progetti 2D, la differenza nelle chiamate di disegno non è il collo di bottiglia e la comodità dei file singoli prevale. Se arrivi al punto in cui cambiare texture conta, la risposta è impacchettare i fotogrammi finiti in un atlante come fase di compilazione, anziché crearli fin dall’inizio come un mega-foglio tagliato a mano.

Domande frequenti

La pixel art è sfocata in Godot 4. Cosa ho dimenticato?

Il filtro della texture. Imposta rendering/textures/canvas_textures/default_texture_filter su Nearest in Project Settings e verifica che Texture Filter del nodo stesso sia su Inherit anziché esplicitamente Linear. Se è ancora sfocato, la finestra di visualizzazione potrebbe usare una scala non intera: controlla stretch mode e scale mode sotto Display → Window.

Dovrei usare AnimatedSprite2D o AnimationPlayer che controlla Sprite2D?

AnimatedSprite2D per una semplice animazione fotogramma per fotogramma: è progettato apposta e richiede meno configurazione. AnimationPlayer quando devi animare altri elementi insieme ai fotogrammi: posizioni delle hitbox, attivazioni di suoni, emissione di particelle, visibilità dei nodi. Molti progetti finiscono per usare entrambi.

Una striscia del fotogramma successivo compare lungo il bordo del mio sprite.

Contaminazione da campionamento appena fuori dalla regione. Imposta il filtro Nearest e attiva filter_clip se usi un AtlasTexture, e verifica che le dimensioni delle celle dividano esattamente la texture. Uno o due pixel di spaziatura trasparente tra sprite nell’originale eliminano il problema definitivamente.

Posso cambiare i fotogrammi dal codice anziché usare il pannello di animazione?

Sì. Su uno Sprite2D, assegna al frame proprietà direttamente. Su un AnimatedSprite2D, chiama play("walk") oppure imposta frame durante la pausa. Controllare manualmente i fotogrammi è comune per elementi come una barra della salute costruita con stati discreti di sprite.

Dividi prima il foglio in fotogrammi

Gli importatori Godot presumono tutti una griglia uniforme. Se la tua non lo è, ritaglia nel browser e carica i risultati con Add Frames from File(s). Magic Slice legge il canale alfa; Manuale e preimpostazioni permette di posizionare personalmente le linee. Nulla lascia il dispositivo.

Apri Ritagliatore di fogli di sprite