Creare un Roguelike 2D in Unity - Parte 3 Guida completa per la creazione di un gioco roguelike 2D in Unity. Parte 3: Generazione Procedurale di Stanze e Dungeon Dinamici

Creare un Roguelike 2D in Unity - Parte 1

Siamo arrivati all’ultimo capitolo della nostra mini-serie su come creare un roguelike 2D in Unity, ispirata al progetto open source 2DRogueTest.

Nella parte 1 abbiamo impostato il progetto, importato la grafica e realizzato il movimento base del personaggio. Nella parte 2 abbiamo aggiunto nemici, intelligenza artificiale e un sistema di combattimento semplice ma efficace.

Ora, per completare l’esperienza roguelike, ci occuperemo della generazione procedurale delle stanze: un sistema che ci permetterà di avere una mappa diversa ad ogni partita, aumentando la rigiocabilità e il fascino dell’ignoto.

1. Il cuore del sistema: la classe DungeonGenerator

Nel progetto troviamo lo script /Scripts/DungeonGenerator.cs, responsabile della creazione dinamica delle stanze e della loro disposizione spaziale.

Questo script utilizza una lista di prefab di stanze (presenti in /Prefabs/Rooms/) e li istanzia a runtime seguendo una semplice logica di espansione.

Ecco una panoramica del codice principale:

Questo codice crea un layout a griglia, in cui ogni stanza ha coordinate logiche (tipo (0,0), (1,0), ecc.) e viene collocata a una distanza costante dalle altre per evitare sovrapposizioni.

Le stanze vengono scelte casualmente tra i prefab definiti nel campo roomPrefabs.


2. Creazione delle stanze prefab

Nel progetto troverai vari prefab di stanze nella cartella /Prefabs/Rooms/, ad esempio:

  • Room_Empty
  • Room_Enemies
  • Room_Loot

Ogni prefab ha una struttura coerente:

  • un suolo (Tilemap o Sprite)
  • muri e colliders
  • eventuali spawn point per nemici e oggetti

È possibile creare nuovi prefab partendo da un modello base, modificando i contenuti all’interno.


3. Spawn dinamico di nemici e oggetti

Ogni stanza può contenere oggetti speciali o nemici. Per fare ciò, si utilizzano degli Empty GameObject come marcatori/spawn points.

Nel prefab puoi creare un oggetto vuoto chiamato ad esempio EnemySpawn, e poi uno script come RoomContent.cs lo rileva in fase di instanziazione:

Così ogni stanza può personalizzare cosa contiene in modo semplice.


4. Posizionamento del giocatore

Nel progetto, il Player viene istanziato nella prima stanza generata, che si trova sempre in (0,0) (posizione Vector3.zero). Assicurati che il prefab Player venga aggiunto alla scena all’avvio, oppure tramite script:

Nel progetto 2DRogueTest, questo avviene nella scena principale tramite prefab.


5. Transizione tra stanze

Le stanze sono statiche ma possono essere collegate con dei trigger di porta o collider con script che spostano il giocatore nella stanza successiva.

Un esempio semplice:

Un sistema più avanzato userebbe una mappa di collegamenti tra stanze, ma per ora il prototipo gestisce la continuità in modo lineare.


6. Rifiniture e miglioramenti futuri

Ora che il dungeon è generato proceduralmente, possiamo pensare a vari miglioramenti:

  • effetti di transizione tra stanze (fade, animazioni)
  • generazione di livelli sempre più ampi
  • boss room e checkpoint
  • salvataggio della mappa e rigiocabilità
  • interfaccia grafica (HUD, HP, minimappa)

Il progetto 2DRogueTest rimane volutamente semplice, ma la struttura è pensata per essere espandibile.


Conclusione

Con questa terza parte completiamo il nostro percorso nella creazione di un roguelike 2D in Unity. Partendo da un semplice personaggio in una mappa statica, abbiamo costruito:

  • un progetto Unity 2D organizzato e riutilizzabile
  • un sistema di movimento semplice e fluido
  • nemici con IA base e combattimento corpo a corpo
  • una struttura di punti vita e morte per tutte le entità
  • una generazione procedurale di dungeon a stanze collegate

Il risultato è un prototipo funzionante, solido e adatto a essere ampliato. Il codice sorgente completo è disponibile su GitHub.

Ci auguriamo che questa guida ti abbia ispirato a creare il tuo dungeon personale. Se vuoi migliorare il progetto, pubblicare la tua versione o semplicemente imparare, sei nel posto giusto.

Al prossimo videogioco!

Fork me on GitHub

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


Il periodo di verifica reCAPTCHA è scaduto. Ricaricare la pagina.

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.