Esplora la documentazione »
Guarda la Demo · Tesi · Presentazione · Segnala un Bug | Richiedi una Funzionalità · English
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 |
Per chi non ha troppa familiarità con GitHub, per ottenere una copia locale funzionante del prototipo è necessario seguire i passi riportati in seguito.
- Git
- Unity Hub
- Unity 2020.2.1 o più recente
- 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.
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.
Vedere la sezione open issues per avere la lista completa delle possibili funzionalità future (e problemi attualmente conosciuti).
- 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.
- Gestione della disconnessione dei client.
- Un menu principale ed una lobby prepartita-
- Una scoreboard dei giocatori.
- Sistema per l'inventario.
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
Distribuito sotto Licenza MIT. Vedi LICENSE per maggiori informazioni.
Michele Righi - righi.michele98@gmail.com
Project Link: github.com/mikyll/UnityDOTS-Thesis
- 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.

