delete

Contattaci

back to resources

Introduzione a Godot, game engine free & open source

Godot
Game Engine
Open Source
Unreal Engine
Unity
data
23/8/2022
data progetto
autore
Luca Cerini
cliente
partnership
url
No items found.

Questo articolo nasce dagli appunti del mio “diario di bordo” riguardo la mia più nuova e recente avventura nel mondo dei Game Engine e di conseguenza ne erediterà la scrittura caratteristica personale. In fin dei conti penso che almeno una volta nella vita di tutti gli sviluppatori è nata quella voglia di creare e plasmare forme di intrattenimento con il loro codice, e non soltanto di muovere qualche finestra/container e riempirlo di campi, pulsanti e tanta altra roba noiosa.

L’articolo si compone di due macro-parti:

  • Introduzione al Game Engine Godot
  • Esempio pratico della realizzazione di un gioco 2D

Non peccherò di superbia, poiché essendo un novello dell’ambiente il mio codice e le mie tecniche potrebbero far storcere il naso ai più skillati in materia. Ma per me il tutto funziona come dovrebbe, il codice è leggibile e soprattutto adoro il pensiero del “less is more”.

 Insomma, le porzioni di codice che incontreremo più avanti sono state fatte DA e PER uno sviluppatore che muove i primi passi con questo Game Engine, rimanendo tuttavia una solida base per studi ed espansioni personali.

Introduzione al Game Engine Godot

Le circostanze del mio avvicinamento a Godot sono al quanto bizzare

Da avido utilizzatore della piattaforma/forum Reddit, sono solito frequentare categorie tecniche relative alla programmazione, all’hardware e assemblaggio di PC ed al PC Gaming in generale.

Il caldo insopportabile di quest’anno (2022) legato alla cappa costante tipica romana hanno in quel periodo fatto nuovamente tornare alla mia mente la voglia di approcciarmi per una volta e seriamente ad un motore di sviluppo di giochi.

Ed ecco il punto di svolta, nella categoria dello sviluppo gaming di Reddit leggo in alcuni post di un nuovo nome, a me completamente sconosciuto: Godot. Incuriosito decido di andare a dare uno sguardo alla sua community, la cui attività è spesso e volentieri un buon indice di prima valutazione per qualsiasi prodotto informatico/framework.

Ebbene, mentre i colossi competitor nel mondo del Game Engine (Unreal Engine e Unity) rilasciavano le loro nuove major release con features spaziali e le rispettive community portavano avanti discussioni su possibili miglioramenti, nuove strategie, fix per le performance…la community di Godot sfornava nell’80%+ dei propri post questo:

“Godette”. La mia prima reazione è stata ovviamente che “ogni giorno ci allontaniamo sempre di più da Dio”. Siamo dunque SICURAMENTE davanti ad un prodotto che o è estremamente nuovo ed è ancora alla ricerca di una sua identità/logo/mascotte oppure che non ha al momento problemi tecnici più seri di cui dover discutere…

Nonostante tutto rimango colpito da una sua tanto proclamata caratteristica: questo motore è LIGHT, leggero, performante, anche su macchine meno recenti. Vi basti pensare che l’intero motore è racchiuso in unico download da ~70MB. Ed io che in quel momento a casa avevo soltanto tra le mani un vecchio portatile i3/4GB RAM del 2011 ho voluto mettere alla prova questa loro tanto decantata feature.

Mentre il mio povero laptop crashava per surriscaldamento al solo sussurro delle parole Unreal Unity, ecco che scarico, lancio l’eseguibile ed avvio Godot nel giro di pochi secondi, al limite del miracolo. Riuscendo a sopportare una prima ora di smanettamenti caotici senza crash, decido che questo prodigioso game engine sarebbe stato mio compagno per questa mia prima impresa.

Breve panoramica

  • Prima release pubblica nel 2014
  • Autori Argentini Juan Linietsky Ariel Manzur
  • Free (MIT License)
  • Open Source (https://github.com/godotengine/godot)
  • Cross Platform (Windows, Linux, macOS, …)
  • 2D/3D/VR e Cross Platform (Desktop, Mobile, Web)
  • Ultima Versione stabile 3.5 (di Agosto 2022)

A questo punto che son state fatte le prime presentazioni mi piace fare un gioco di persuasione inverso…Sarebbe semplice entrare nel dettaglio del cosa rende Godot unico e migliore rispetto ai competitors ma questa volta preferire cominciare dal punto di vista contrario.

Motivi per NON usare Godot

  • La maggior parte delle offerte di lavoro si basano ancora su Unity Unreal Engine

  • Impossibilità di esportare per le piattaforme console, o almeno non senza cacciar fuori qualche soldo :'(

  • Lo store degli assets in Godot offre soltanto elementi gratuiti
    (a discapito della loro qualità)

  • Nei giochi 3D le performance non sono delle migliori…

  • E’ un motore “giovane”, quindi con minori risorse e materiale online da cui attingere come riferimento/studio

Insomma, uno scenario abbastanza pesante e negativo, ma se ci pensate bene qualunque framework ed engine ha pur iniziato da qualche parte, ed in prospettiva, le feature sviluppate e a disposizione su Godot nel giro di 8 anni dalla sua prima release sono di gran lunga superiori per numero e qualità a quelle dei due big brothers UE e Unity.

Se ancora non vi ho scoraggiato direi possiamo proseguire con una lista più rosea e positiva.

Motivi per usare Godot

  • Ripeto: è FREE, e non prende commissioni sui giochi realizzati
  • LIGHT: con i suoi 70MB di eseguibile, GODOT probabilmente potrebbe girare anche sul forno a microonde di casa (assieme a Doom ovviamente)
  • Open Source con un attività esponenzialmente crescente
  • Beginner-friendly (sia grazie all’UI intuitiva che alla semplicità del suo linguaggio GDScript
  • Ottima documentazione (Link)
  • Alta riusabilità degli elementi/codice

Tornando a noi ho deciso di non includere un’altra feature tanto decantata in questa lista, ovvero la possibilità di usare il C# al posto del proprietario GDScript. Il motivo è semplice la versione 3 è stata la prima a supportare anche il C#, sicuramente con una base di sviluppatori già affermata nel mondo professionale, ma la sua implementazione nell’engine è a mio parere ancora acerba ed incompleta.

Ma non disperate, la sua finalizzazione in GODOT avverrà con enorme probabilità con il rilascio della versione 4, già in sviluppo parallelo alle 3 da quasi due anni. Tuttavia, trascorse queste prime settimane con l’engine posso affermare di non essermi trovato affatto male con il linguaggio proprietario GDScript: con una sintassi simile a Python, parliamo di un linguaggio di alto livello semplice ed immediato, ottimizzato per il motore. Mentre nei miei scarsi tentativi con C# mi son presto reso conto che il micromanagement necessario per una corretta gestione delle risorse uccideva completamente il mio tempo e la perfomance dei miei prodotti.

Altra feature che ho volontariamente omesso nella lista dei vantaggi è la possibilità di sviluppare usando la modalità Visual Scripting, già presente su Unreal Engine (Flow Control).

Diciamo semplicemente che questa roba non fa per me, o comunque immagino che qualsiasi sviluppatore anche junior potrebbe scrivere e mantenere del codice in Godot molto meglio di quanto prodotto dallo strumento di Visual Scripting.

Feature simpatica, sicuramente una risposta diretta al Flow Control di UE e rivolta ad un pubblico che ancora si deve affacciare al mondo della programmazione, ma ci vuole davvero poco per rendersi indipendenti ed autonomi, passando direttamente all’editor classico di codice.

Struttura a Nodi & Scene

Anche un neofita come me apprezzerà l’altissima riusabilità e gestione delle risorse dovute all’ingegnoso sistema a nodi e scene di Godot:

  • In Godot un gioco può essere visto come un ALBERO di SCENE

  • Ed ogni SCENA è paragonabile ad un ALBERO di NODI

  • I NODI sono l’unità fondamentale e più piccola dei nostri giochi

  • Ci sono tantissimi NODI in GODOT specializzati in precise funzioni (musica, suoni, animazione, pulsanti, collisioni, …)

  • Un gruppo di NODI può essere infine salvato come SCENA per essere facilmente riutilizzato in…altre SCENE

Esempio pratico della realizzazione di un gioco 2D con GODOT

Ed ora…lo creiamo o no questo giochino?

Mi rendo conto solo dopo svariati tentativi che mettere per iscritto una cosa così VISIVA come l’uso di un game engine sia davvero un’ardua impresa.

Di seguito cercherò di mostrarvi e descrivervi tutte le schermate che ci porteranno alla creazione di un giochino alla Flappy Bird (link video per chi non lo conoscesse). Poiché non sarà possibile descrivere ogni singolo incremento del codice ho deciso di mostrarvi fin dal principio l’intera scaletta del nostro sviluppo per poi entrare nel dettaglio di tutte le maggiori entità.

Ecco dunque di seguito le risorse che vi metto a disposizione:

Scaletta “Floppy Bird”

  • MenuNode con button START e CAMERA
  • WorldNode con button BACK e CAMERA
  • PlayerNode (sprite, collision) e aggiungiamolo al WorldNode
  • PlayerNode (gravity)
  • PlayerNode (FLAP)
  • WallNode (sprite, collision, movement) e aggiungiamolo al WorldNode
  • Arriviamo fino a 5 WallNode
  • Integriamo la logica di collisione del PlayerNode col body del WallNode
  • Creiamo la classe GLOBALE “Globals.gd” e aggiungiamola all’ AUTO LOAD del progetto
  • Aggiungiamo la PointArea al WallNod
  • Integriamo la logica di collisione del PlayerNode con la PointArea del WallNode
  • Mostriamo i vari score durante la partita con una Label
  • Quando muoio, salvo eventualmente il BEST SCORE
  • Creiamo una “reset area” per riposizionare e creare un loop di muri
  • Salviamo l’eventuale best score in un file quando moriamo
  • Quando si auto carica GLOBALS.gd leggiamo il best score nel file
  • A questo punto aggiungiamo il BEST SCORE anche nel menu iniziale
  • Aggiungiamo una fonte di luce (Light2D) al WorldNode
  • Aggiungiamo degli occlusori di luce al nostro WallNode
  • Cambio dello sprite del player con un ANIMATED SPRITE flying bird
  • ANIMATED SPRITE Infuocata quando supero il best score
  • MovingWall

Globals.gd (scritp)

Script nella root del progetto. Conterrà i nostri elementi “globali” come ad esempio lo score attuale ed il best score. Per essere caricato automaticamente all’avvio del gioco dovremo impostarlo nella sezione AutoLoad del progetto

Come ultimo passaggio per completare il grafo di esempio che vogliamo riprodurre ho creato e popolato in modo del tutto analogo anche la tabella arco che rappresenta il legame tra due persone, chiamata AmicoDi ovvero un arco che collega la tabella Persone a sé stessa (stavolta senza attributi).

A questo punto abbiamo ricreato esattamente la struttura che volevamo, e possiamo eseguire qualche query per renderci conto di come estrarre informazioni dal sistema appena costruito.

StartMenuNode.tscn (SCENA)CH

Scena aggiunta alla folder “scenarios”. Leggerà da un file il best score registrato (letto da Globals) ed il pulsante start ci porterà al vero e proprio gioco. Di seguito lo script associato alla scena e che regola i suddetti comportamenti.

StartMenuNode.gd (script)

WallNode.tscn (SCENA)

La scena del nostro muro è posizionata nella folder entities e si compone di 3 parti: porzione superiore, porzione inferiore del muro (il contatto col player indicherà il fine/reset partita) e l’area centrale denominata PointArea. Il player che entra in una PointArea incrementerà il suo punteggio di 1. Il muro dovrà muoversi a velocità costante verso la parte sinistra dello schermo, mentre il giocatore potrà “volare” verticalmente rimanendo sempre al centro.

WallBody.gd (script)

PlayerNode.tscn (SCENA)

La scena del nostro player è posizionata nella folder entities ed è formato principalmente da un corpo principale (con sprite), un’area leggermente più grande di lui per registrare le collisioni ed un’eventuale sprite animata che si attiva al superamento del best score. Il player viene sempre attirato giù da una costante gravità e l’unico modo che avrà di volare sarà quello di sbattere le ali premendo il comando FLAP che legheremo al pulsante spazio nelle impostazioni di progetto.

PlayerBody.gd (script)

WorldNode.tscn (SCENA)

La scena del nostro mostro di gioco è posizionata nella folder scenarios.

Gli elementi che la compongono saranno il player, delle copie di muri statici, un muro mobile, un’area di reset dei muri (per riportali a sinistra senza generarne di nuovi all’infinito) ed un pulsante per tornare al menù iniziale. Immancabile ovviamente la label a centro schermo per indicare i vari score.

WorldNode.gd (script)

Che aspettate? Premete F5 per avviare la compilazione del tutto ed avviare la vostra personalissima copia di Floppy Bird!

Risultati

resources

Introduzione a Godot, game engine free & open source

Introduzione a Godot, game engine free & open source

Game Engine

Open Source

Unreal Engine

Unity

TDA in a nutshell: how can we find multidimensional voids and explore the “black boxes” of deep learning?

TDA in a nutshell: how can we find multidimensional voids and explore the “black boxes” of deep learning?

Multidimensional Voids

Black Boxes

Deep Learning

Topological Data Analysis

AI: bias, esempi nella realtà e nella cinematografia

AI: bias, esempi nella realtà e nella cinematografia

Bias

Cinema

AMRITA (Automatic, Maintenance, Reengineering, Integrated, Technology Application)

AMRITA (Automatic, Maintenance, Reengineering, Integrated, Technology Application)

L'ascesa del Prompt Designer: trasformare il design nell'era dell'AI generativa

L'ascesa del Prompt Designer: trasformare il design nell'era dell'AI generativa

Prompt

Design

AI Generativa

AI Designer

Le nuove linee guida per la sicurezza delle password aziendali

Le nuove linee guida per la sicurezza delle password aziendali

Password aziendali

Linee guida Garante Privacy

Garante Privacy

GDPR

6 motivi per scegliere Flutter nel 2024

6 motivi per scegliere Flutter nel 2024

App Development

Google

React Native

AI, sistemi esperti e rappresentazione della conoscenza

AI, sistemi esperti e rappresentazione della conoscenza

Sistemi esperti

Rappresentazione della conoscenza

Tradurre la Lingua Italiana dei Segni - il Progetto LIS2Speech

Tradurre la Lingua Italiana dei Segni - il Progetto LIS2Speech

LIS2SPEECH

Traduzione LIS

User Experience Design tra accessibilità e inclusività

User Experience Design tra accessibilità e inclusività

User Experience

Accessibilità

Inclusività

Assitech.Net entra nella galassia Orbyta Technologies

Assitech.Net entra nella galassia Orbyta Technologies

Orbyta Technologies

Orbyta Group

Acquisizione

News

Programmazione Funzionale Java

Programmazione Funzionale Java

Functional Programming

Java

Software Development

Reactive Programming: parallelizzare con Project Reactor

Reactive Programming: parallelizzare con Project Reactor

Programmazione Reattiva

Reactive Programming

Project Reactor

Piattaforme E-commerce Wholesale per il settore B2B

Piattaforme E-commerce Wholesale per il settore B2B

Wholesale

B2B

Antipattern nello sviluppo software: altri errori da evitare

Antipattern nello sviluppo software: altri errori da evitare

Software Development

Antipattern nello sviluppo software: definizione, ambiti di applicazione ed esempi

Antipattern nello sviluppo software: definizione, ambiti di applicazione ed esempi

Software Development

App tattiche di supporto alla gestione dei progetti reiterativi

App tattiche di supporto alla gestione dei progetti reiterativi

App Development

Power Platform

Low Code

DevOps

Introduzione a Power Pages, il servizio Microsoft per siti web low-code

Introduzione a Power Pages, il servizio Microsoft per siti web low-code

Microsoft

Low-code

Power Platform

Introduzione a Jupyter e Seaborn per Data Analysis e Visualization

Introduzione a Jupyter e Seaborn per Data Analysis e Visualization

Jupiter

Python

Data Analysis

Data Visualization

Come utilizzare Matplotlib per la Data Visualization in Python

Come utilizzare Matplotlib per la Data Visualization in Python

Python

Data Visualization

Data Science

Data Analysis

Introduzione alla libreria Dash per Python

Introduzione alla libreria Dash per Python

Python

Data Science

Data Visualization

Data Analysis

Prime Video passa al monolite: ma allora serverless è inutile? 

Prime Video passa al monolite: ma allora serverless è inutile? 

Tableau per la Business Intelligence: introduzione, tutorial e confronto

Tableau per la Business Intelligence: introduzione, tutorial e confronto

Introduzione a Qlik Sense, piattaforma di Business Intelligence avanzata

Introduzione a Qlik Sense, piattaforma di Business Intelligence avanzata

Applicazioni Cloud Native: definizione, vantaggi e tecnologie

Applicazioni Cloud Native: definizione, vantaggi e tecnologie

Power Apps Tutorial – Case Study: come costruire una business app da zero

Power Apps Tutorial – Case Study: come costruire una business app da zero

Il futuro del gaming tra F2P, GaaS, Crypto e Play to Earn

Il futuro del gaming tra F2P, GaaS, Crypto e Play to Earn

Power Apps Basics: interfacce, implementazione & vantaggi

Power Apps Basics: interfacce, implementazione & vantaggi

Strumenti di Business Intelligence: QlikSense & Power BI a confronto

Strumenti di Business Intelligence: QlikSense & Power BI a confronto

Introduzione a Serverless: non solo Lambda Function

Introduzione a Serverless: non solo Lambda Function

Metaverso: siamo pronti a cogliere l’opportunità?

Metaverso: siamo pronti a cogliere l’opportunità?

Recap Flutter Forward 2023: le 7 novità più interessanti

Recap Flutter Forward 2023: le 7 novità più interessanti

Let's Redux React to a Game

Let's Redux React to a Game

Introduzione a PowerShell

Introduzione a PowerShell

Pago con carta: i trend dei pagamenti digitali e il futuro delle carte di credito

Pago con carta: i trend dei pagamenti digitali e il futuro delle carte di credito

NFT World: il fenomeno NFT tra metaverso, business e GameFi

NFT World: il fenomeno NFT tra metaverso, business e GameFi

Quick Escape Room

Quick Escape Room

Orbyta Invaders Ignition

Orbyta Invaders Ignition

Il lancio della nuova Identity di Orbyta parte dal Metaverso!

Il lancio della nuova Identity di Orbyta parte dal Metaverso!

development

design

metaverse

brand identity

Database a grafo in SQL Server

Database a grafo in SQL Server

Data Science Job Roles: i 4 ruoli più richiesti nel settore

Data Science Job Roles: i 4 ruoli più richiesti nel settore

Teoria dei giochi: Propagazione delle strategie

Teoria dei giochi: Propagazione delle strategie

The chosen one: .NET 5

The chosen one: .NET 5

Network Science e Social Network Analysis

Network Science e Social Network Analysis

Isolation levels on SSMS

Isolation levels on SSMS

Teoria dei Grafi

Teoria dei Grafi

Creare un podcast in automatico a partire da audio vocali e musica

Creare un podcast in automatico a partire da audio vocali e musica

Teoria dei Giochi

Teoria dei Giochi

Recommender systems: principali metodologie degli algoritmi di suggerimento

Recommender systems: principali metodologie degli algoritmi di suggerimento

Introduction to Quantum Computing and Qiskit

Introduction to Quantum Computing and Qiskit

System Versioned Tables

System Versioned Tables

Vim o non Vim

Vim o non Vim

I vantaggi di un Message Broker

I vantaggi di un Message Broker

PlayStation 5 e l'accesso ai dati: un cambio architetturale?

PlayStation 5 e l'accesso ai dati: un cambio architetturale?

Protezione dei Web Services

Protezione dei Web Services

need more info?

contattaci