README.it.md
February 11, 2024 · View on GitHub
Progetto di Applicazioni e Giochi Multiplayer
su Architettura Unity DOTS
Questo progetto è stato realizzato come parte integrante della mia tesi di laurea triennale in Ingegneria
Informatica, riguardante appunto la nuova architettura Unity DOTS. L'obbiettivo dell'elaborato, oltre
all'analisi del nuovo layout orientato ai dati fornito dal modello basato su ECS, era quello di creare
un prototipo di gioco multiplayer funzionante realizzato interamente sfruttando DOTS.
Esplora la documentazione »
Guarda la Demo · Tesi · Presentazione · Segnala un Bug | Richiedi una Funzionalità · English
Indice
Il Progetto
Data-Oriented Technology Stack (DOTS) è un insieme di librerie realizzate dagli sviluppatori di Unity nel corso degli ultimi anni, ed al momento della scrittura (2021) si trova ancora in fase di sviluppo.
DOTS si propone di sostituire la vecchia architettura, basata su un modello a componenti (GameObject + MonoBehaviour), con una nuova basata su ECS (Entità, Componenti e Sistemi). L'obbiettivo è ottenere un'architettura non limitata dalla programmazione a oggetti, in quanto come sappiamo presenta diversi problemi - legati soprattutto al polimorfismo, alle catene di ereditarietà ed ai tipi riferimento.
A tal proposito, tramite un layout orientato ai dati, DOTS permette di ottenere performance by default, in
quanto il codice viene organizzato separando i dati (racchiusi nei componenti) dal comportamento (confinato
nei sistemi). Le "cose" a tempo di esecuzione non sono più dei pesanti oggetti, con i dati sparpagliati in
memoria, ma dei semplici indici numerici (che rappresentano le entità), paragonabili alle chiavi di un
database. Fra i numerosi vantaggi di questa architettura, spiccano la possibilità di utilizzare al meglio le
CPU moderne, sfruttando il potenziale dei core multipli e permettendo un uso efficiente delle cache, che non
vengono saturate dalla miriade di dati inutili o superflui presenti negli oggetti. Inoltre, grazie alla
separazione delle competenze e della logica, il codice che gli sviluppatori scrivono diventa una buona
approssimazione di basso livello di una soluzione già corretta ed efficiente, che non ha bisogno quindi, se
non in rari casi, di essere ottimizzata.
I principali package utilizzati per realizzare il prototipo sono:
- Entities - implementa il modello basato su ECS.
- Physics - realizza la fisica.
- NetCode - implementa il networking.
Le immagini seguenti mostrano un esempio di esecuzione del prototipo, tramite un server headless e due client
connessi: il primo è in esecuzione nell'editor Unity, il secondo è un'applicazione standalone in esecuzione
su una macchina differente. Usando il package NetCode, quando si entra in PlayMode nell'editor Unity, vengono
messi in esecuzione il server, un client ed un numero arbitrario di thin clients (in questo caso non
impostati).
![]() |
![]() |
| PC1: Editor Unity | PC2: Build Standalone |
Sviluppato Con
Per Iniziare
Per chi non ha troppa familiarità con GitHub, per ottenere una copia locale funzionante del prototipo è necessario seguire i passi riportati in seguito.
Prerequisiti
- Git
- Unity Hub
- Unity 2020.2.1 o più recente
Installazione
- Installare Git presso Download Git.
- Clonare la repository.
git clone https://github.com/mikyll/UnityDOTS-Thesis - Scaricare Unity Hub presso Download Unity.
- Installare una versione Unity appropriata (2020.2.1 o superiore) presso Download Archive oppure direttamente dall'apposita sezione su Unity Hub.
- Aggiungere il progetto su Unity Hub: Projects > Add > Select Directory.
Utilizzo
Per provare il prototipo in multiplayer è possibile creare una build per un client standalone, quindi entrare in Play Mode nell'editor Unity e connettere un'applicazione standalone; oppure creare una build per il server ed una per il client e connettere diversi client al server.
Per ulteriori esempi fare riferimento alla Documentazione.
Roadmap
Vedere la sezione open issues per avere la lista completa delle possibili funzionalità future (e problemi attualmente conosciuti).
Problemi Non Risolti
- La visuale in terza persona a volte inizia sfarfallare.
- Le simulazioni fisiche con gli oggetti dinamici non sono sincronizzate fra i client.
- Le build standalone a volte crashano.
Sviluppi Futuri
- Gestione della disconnessione dei client.
- Un menu principale ed una lobby prepartita-
- Una scoreboard dei giocatori.
- Sistema per l'inventario.
Contribuire
I contributi sono ciò che rende la community open source il posto meraviglioso che è, per imparare, trarre ispirazione e creare contenuti. Qualsiasi contributo aggiunto, che sia un parere costruttivo, il report di un bug scoperto, una soluzione ad un problema o anche solo un'idea su come risolverlo, è largamente apprezzato!
- Eseguire una Fork del Progetto.
- Creare un Branch per la propria Feature (
git checkout -b feature/AmazingFeature) - Eseguire il Commit dei propri Cambiamenti (
git commit -m 'Add some AmazingFeature') - Eseguire il Push al proprio Branch (
git push origin feature/AmazingFeature) - Aprire una Richiesta di Pull
Licenza
Distribuito sotto Licenza MIT. Vedi LICENSE per maggiori informazioni.
Contatti
Michele Righi - righi.michele98@gmail.com
Project Link: github.com/mikyll/UnityDOTS-Thesis
Ringraziamenti
- Il mio correlatore Andrea Garbugli per avermi proposto un argomento così interessante e per avermi fornito aiuto e supporto nella stesura del documento di tesi.
- Othneil Drew per il magnifico template del README.

