Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

La filosofia progettuale di Godot

Ora che ti sei bagnato le mani, parliamo del design di Godot.

Ogni motore di gioco è diverso e si adatta alle diverse esigenze. Non solo offrono una serie di caratteristiche, ma il design di ogni motore è unico. Questo porta a diversi flussi di lavoro e modi diversi per formare le strutture dei tuoi giochi. Tutto ciò deriva dalle rispettive filosofie progettuali.

Questa pagina è qui per aiutarvi a capire come funziona Godot, a partire da alcuni dei suoi pilastri fondamentali. Non si tratta di un elenco delle caratteristiche disponibili, né di un confronto tra motori. Per sapere se un motore può essere adatto al tuo progetto, devi provarlo tu stesso e comprenderne il design e i limiti.

Guarda Godot spiegato in 7 minuti se stai cercando una panoramica delle funzionalità del motore.

Progettazione e composizione orientata agli oggetti

Godot abbraccia il design orientato agli oggetti al suo interno con il suo sistema flessibile di scene e la gerarchia dei Nodi, e cerca di stare lontano da rigidi schemi di programmazione per offrire un modo intuitivo per strutturare il tuo gioco.

Per prima cosa, Godot consente di comporre o aggregare scene. È come un prefabbricato annidato: è possibile creare una scena LuceAccesa una scena LanternaRotta che utilizza LuceAccesa. Poi, creare una città piena di LanterneRotte. Cambia il colore di LuceAccesa, salva, e tutte le LanterneRotte della città si aggiornano istantaneamente.

Inoltre, puoi ereditare da qualsiasi scena.

Una scena di Godot può essere un'arma, un personaggio, un oggetto, una porta, un livello, una parte di un livello.... tutto quello che vuoi. Funziona come una classe in codice puro, tranne che sei libero di progettarlo utilizzando l'editor, usando solo il codice, o mescolando e abbinando i due.

È diverso dai prefabbricati che si trovano in vari motori 3D, in quanto è possibile ereditare ed estendere quelle scene. Puoi creare un Mago che estende il tuo Personaggio. Modificare il Personaggio nell'editor e anche il Mago si aggiornerà. Ti aiuta a costruire i tuoi progetti in modo che la loro struttura corrisponda al design del gioco.

image0

Nota inoltre che Godot offre tanti tipi di oggetti diversi chiamati nodi, ognuno con uno scopo specifico. Tutti i nodi sono parte di un albero ed ereditano dai loro genitori, fino alla classe Node. Sebbene il motore includa alcuni nodi simili alle forme di collisione, che sono utilizzati da un corpo fisico genitore, la maggior parte dei nodi funziona in modo indipendente l'uno dall'altro.

In altre parole, i nodi di Godot non funzionano come i componenti in alcuni altri motori di gioco.

image1

Sprite è un Node2D, un CanvasItem e un Node. Ha tutte le proprietà e le caratteristiche delle sue tre classi padre, come le trasformazioni o la possibilità di disegnare forme personalizzate e renderizzare con uno shader personalizzato.

Pacchetto tutto incluso

Godot cerca di fornire i propri strumenti per rispondere ai bisogni più comuni. Ha uno spazio di lavoro dedicato allo scripting, un editor di animazione, un editor di tilemap, un editor di shader, un debugger, un profiler, la possibilità di caricare a caldo localmente e su dispositivi remoti, ecc.

image2

L'obiettivo è quello di offrire un pacchetto completo per creare giochi e un'esperienza utente senza interruzioni. È comunque possibile lavorare con programmi esterni, purché per essi ci sia un estensione d'importazione.

Questo è anche in parte il motivo per cui Godot offre il proprio linguaggio di programmazione GDscript insieme a C#. GDScript è progettato per le esigenze degli sviluppatori e dei designer di giochi, e sono strettamente integrati nel motore e nell'editor.

GDscript ti permette di scrivere codice usando una sintassi basata sull'indentazione, ma rileva i tipi e offre la qualità di auto-completamento tipica di un linguaggio statico. È anche ottimizzato per il codice di gioco, tramite tipi integrati come vettori e colori.

Nota che con GDExtension, puoi scrivere codice ad alte prestazioni usando linguaggi compilati come C, like C, C++, Rust, D, Haxe, o Swift senza dover ricompilare il motore.

Tieni presente che l'area di lavoro 3D non presenta tanti strumenti come l'area di lavoro 2D. Avrai bisogno di programmi esterni o componenti aggiuntivi per modificare i terreni, animare personaggi complessi e così via. Godot fornisce un'API completa per estendere le funzionalità dell'editor usando il codice di gioco. Vedi The Godot editor is a Godot game di seguito.

Open source

Godot offre una base di codice completamente open source sotto la licenza MIT. Ciò significa che il codice sorgente è libero di essere scaricato, utilizzato, modificato o condiviso da chiunque, purché il file della licenza rimanga intatto.

Tutte le tecnologie fornite con Godot, comprese le librerie di terze parti, devono essere legalmente compatibili con questa licenza open source. Pertanto, la maggior parte dei componenti di Godot è sviluppata da zero dai contributori della comunità.

Chiunque può collegare strumenti proprietari per le esigenze dei loro progetti - semplicemente non saranno inclusi nel motore. Questo può includere Google AdMob, o FMOD. Ognuno di questi può essere invece implementato come plugin di terze parti.

D'altra parte, in un progetto con sorgente aperto è possibile imparare dal motore ed estenderne le funzionalità come più ti aggrada. Puoi anche fare debug dei giochi in maniera semplice, poiché Godot stamperà gli errori con una stack trace, anche se arrivano dal motore stesso.

Nota

Questo non influenzerà il lavoro che fai con Godot in nessun modo: non ci sono vincoli collegati al motore o qualsiasi cosa tu faccia con esso.

Gestito dalla comunità

Godot è creato dalla sua comunità, per la comunità, e per tutti i creatori di giochi. Sono i bisogni degli utenti e le discussioni libere che guidano gli aggiornamenti più fondamentali. Le nuove funzionalità dagli sviluppatori principali spesso si concentrano su cosa avvantaggerà prima la maggior parte degli utenti.

Detto questo, sebbene una manciata di sviluppatori dedicati lavori ad esso a tempo pieno, il progetto ha migliaia di contributori al momento di scrittura. Programmatori benevolenti lavorano su funzionalità di cui potranno avere bisogno essi stessi, quindi vedrai i miglioramenti in tutti gli angoli del motore contemporaneamente in ogni versione maggiore.

L'editor di Godot è un gioco sviluppato in Godot

L'editor di Godot gira sul motore di gioco. Esso utilizza il sistema di interfacce utente del motore, può ricaricare codice e scene in maniera veloce quando si effettuano test sui progetti, oppure eseguire codice di gioco nell'editor. Ciò significa che tu puoi usare lo stesso codice e scene per i tuoi giochi, o costruire estensioni per l'editor.

Ciò porta a un sistema d'interfaccia utente affidabile e flessibile, dato che supporta l'editor stesso. Con l'annotazione @tool, puoi eseguire qualsiasi codice di gioco nell'editor.

../../_images/introduction_rpg_in_a_box.webp

RPG in a Box é un editor di RPG (giochi di ruolo) voxel creato con Godot. Usa gli strumenti dell'interfaccia utente di Godot per il suo sistema di programmazione basato sui nodi e per il resto dell'interfaccia.

Metti l'annotazione @tool in cima a qualsiasi file GDScript ed esso verrà eseguito nell'editor. Questo ti consente di importare ed esportare estensioni, creare estensioni come editor di livelli personalizzati, o creare script con gli stessi nodi e API che utilizzi nei tuoi progetti.

Nota

L'editor è completamente scritto in C++ ed è compilato statisticamente nell'eseguibile. Questo significa che non puoi importarlo come un progetto tipico avente un file project.godot.

Motori 2D e 3D separati

Godot offre motori di rendering 2D e 3D dedicati. Di conseguenza, l'unità di base per le scene 2D è il pixel. Anche se i motori sono separati, è possibile renderizzare il 2D in 3D, il 3D in 2D, e sovrapporre gli sprite e le interfacce 2D nel tuo mondo 3D.