Indice dei contenuti
Chi non ha mai voluto creare il proprio videogioco? Magari un piccolo dungeon crawler, con visuale dall’alto, un eroe che si muove tra stanze oscure piene di mostri, e quella magica sensazione di imprevedibilità che solo un roguelike sa offrire. Se anche tu, come noi, hai sognato almeno una volta di dar vita al tuo mondo in pixel art, allora sei nel posto giusto.
In questa serie di tre articoli ti guideremo passo dopo passo nella realizzazione di un semplice ma completo roguelike 2D sviluppato in Unity, prendendo come punto di riferimento il nostro progetto open source 2DRogueTest, scaricabile liberamente su GitHub. Ovviamente l'esempio che vi proponiamo di realizzare non è pensato per essere un gioco commerciale né un capolavoro visivo: è un esempio concreto, realizzato con l’intento di aiutare gli sviluppatori alle prime armi a orientarsi tra script, prefab, tilemap e logiche di gameplay.
In questa Parte 1, cominceremo con il setup del progetto, l’importazione degli sprite e la creazione del sistema di movimento per il personaggio. Niente di complicato o stressante: tutto spiegato con calma, con esempi pratici, file esistenti, e con l’idea di divertirci mentre impariamo.
Pronto a muovere i primi passi nel tuo dungeon digitale? Allora partiamo!
1. Creazione del progetto Unity
Apriamo Unity Hub e creiamo un nuovo progetto 2D chiamato 2DRogueTest
. Per semplicità useremo il pipeline Built-in Render Pipeline, ma puoi adattarlo facilmente anche a URP.
Assicurati che il progetto abbia la seguente struttura iniziale:
1 2 3 4 5 6 |
/Assets /Animations /Prefabs /Scenes /Scripts /Sprites |
Queste cartelle esistono già nel repository GitHub.
Apri la scena /Scenes/SampleScene.unity
, che è la scena principale del gioco.
2. Importazione della grafica pixel
Nella cartella /Sprites
troviamo gli sprite usati nel gioco. Tra questi:
character.png
– il nostro personaggioenemy.png
– nemico basetileset.png
– tileset per pavimenti e muri
Unity li importerà come Texture Type: Sprite (2D and UI)
. Imposta il Pixels Per Unit
coerentemente (es. 16 o 32) per mantenere le proporzioni pixel-perfect.
Nel file Sprites.meta
troviamo le impostazioni corrette per importazione e slicing automatico.
3. Aggiunta del personaggio
Nel progetto, il GameObject principale per il player si trova nel prefab /Prefabs/Player.prefab
. Questo è composto da:
- uno Sprite Renderer con
character.png
- un
Rigidbody2D
(Body Type: Dynamic) - un
BoxCollider2D
A esso è associato uno script chiamato PlayerController.cs
che troviamo in /Scripts/PlayerController.cs
.
Ecco uno stralcio del codice:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class PlayerController : MonoBehaviour { public float moveSpeed = 5f; private Rigidbody2D rb; private Vector2 movement; void Start() { rb = GetComponent<Rigidbody2D>(); } void Update() { movement.x = Input.GetAxisRaw("Horizontal"); movement.y = Input.GetAxisRaw("Vertical"); } void FixedUpdate() { rb.MovePosition(rb.position + movement * moveSpeed * Time.fixedDeltaTime); } } |
Questo semplice script consente il movimento fluido in 4 direzioni.
4. Setup della mappa e ambiente
La mappa iniziale del gioco è costruita a runtime, ma nel progetto troviamo un esempio statico nella scena SampleScene
per testare il movimento. Il suolo e i muri sono creati posizionando manualmente tile estratti da tileset.png
.
In alternativa, è possibile importare il package 2D Tilemap Editor
da Unity per creare mappe direttamente in editor.
5. Camera e follow del player
La camera principale della scena ha uno script chiamato CameraFollow.cs
che troviamo in /Scripts/CameraFollow.cs
. Ecco il codice:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class CameraFollow : MonoBehaviour { public Transform target; public float smoothSpeed = 0.125f; public Vector3 offset; void LateUpdate() { Vector3 desiredPosition = target.position + offset; Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed); transform.position = smoothedPosition; } } |
Per far funzionare lo script, basta assegnare il transform del player al campo target
nello script.
6. Test e build
A questo punto è possibile eseguire la scena SampleScene
, muovere il personaggio e testare che tutto funzioni. La mappa è ancora statica, ma nella prossima parte ci occuperemo di aggiungere nemici, IA e sistema di combattimento.
Conclusione
In questa prima parte abbiamo costruito le basi: player, movimento, mappa e camera. Tutto è già disponibile nel progetto GitHub 2DRogueTest. Nella prossima parte ci concentreremo sull'intelligenza artificiale dei nemici e sul sistema di combattimento.