Skip to content

Latest commit

 

History

History
255 lines (198 loc) · 11.2 KB

File metadata and controls

255 lines (198 loc) · 11.2 KB

Contributors Forks Stargazers Issues MIT License
Unity C# Visual Studio

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

  1. Il Progetto
  2. Per Iniziare
  3. Utilizzo
  4. Roadmap
  5. Contributire
  6. Licenza
  7. Contatti
  8. Ringraziamenti

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).

EditorGIF StandaloneGIF
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

  1. Installare Git presso Download Git.
  2. Clonare la repository.
    git clone https://github.com/mikyll/UnityDOTS-Thesis
  3. Scaricare Unity Hub presso Download Unity.
  4. Installare una versione Unity appropriata (2020.2.1 o superiore) presso Download Archive oppure direttamente dall'apposita sezione su Unity Hub.
  5. 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!

  1. Eseguire una Fork del Progetto.
  2. Creare un Branch per la propria Feature (git checkout -b feature/AmazingFeature)
  3. Eseguire il Commit dei propri Cambiamenti (git commit -m 'Add some AmazingFeature')
  4. Eseguire il Push al proprio Branch (git push origin feature/AmazingFeature)
  5. 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

LinkedIn GitHub followers