All Projects → mikyll → UnityDOTS-Thesis

mikyll / UnityDOTS-Thesis

Licence: MIT License
Bachelor's degree thesis on Unity DOTS architecture

Programming Languages

C#
18002 projects
TeX
3793 projects
ShaderLab
938 projects

Projects that are alternatives of or similar to UnityDOTS-Thesis

SpaceWar-ECS
A space war game made with ECS and JobSystem in Unity.
Stars: ✭ 26 (+85.71%)
Mutual labels:  multiplayer, ecs, entity-component-system, dots, netcode
Gdk For Unity
SpatialOS GDK for Unity
Stars: ✭ 296 (+2014.29%)
Mutual labels:  multiplayer, ecs, entity-component-system
apecs
A petite entity component system
Stars: ✭ 17 (+21.43%)
Mutual labels:  data-oriented-design, ecs, entity-component-system
ECSCombat
A space battle simulation, based around Unity ECS framework
Stars: ✭ 81 (+478.57%)
Mutual labels:  ecs, entity-component-system, dots
Gdk For Unity Fps Starter Project
SpatialOS GDK for Unity FPS Starter Project
Stars: ✭ 119 (+750%)
Mutual labels:  multiplayer, ecs, entity-component-system
space
A SCI-FI community game server simulating space(ships). Built from the ground up to support moddable online action multiplayer and roleplay!
Stars: ✭ 25 (+78.57%)
Mutual labels:  multiplayer, ecs, entity-component-system
Entitas Sync Framework
Networking framework for Entitas ECS. Targeted at turnbased games or other slow-paced genres.
Stars: ✭ 98 (+600%)
Mutual labels:  multiplayer, ecs, entity-component-system
Flecs
A fast entity component system (ECS) for C & C++
Stars: ✭ 2,201 (+15621.43%)
Mutual labels:  data-oriented-design, ecs, entity-component-system
Entt
Gaming meets modern C++ - a fast and reliable entity component system (ECS) and much more
Stars: ✭ 6,017 (+42878.57%)
Mutual labels:  data-oriented-design, ecs, entity-component-system
gdk-for-unity-blank-project
SpatialOS GDK for Unity Blank Project
Stars: ✭ 33 (+135.71%)
Mutual labels:  multiplayer, ecs, entity-component-system
polymorph
A fast and frugal entity-component-system library with a focus on code generation and compile time optimisation.
Stars: ✭ 74 (+428.57%)
Mutual labels:  data-oriented-design, ecs, entity-component-system
com.unity.netcode.gameobjects
Netcode for GameObjects is a high-level netcode SDK that provides networking capabilities to GameObject/MonoBehaviour workflows within Unity and sits on top of underlying transport layer.
Stars: ✭ 1,678 (+11885.71%)
Mutual labels:  multiplayer, netcode
artemis-odb-entity-tracker
🎲 Visual Entity Tracker for ECS library: artemis-odb
Stars: ✭ 27 (+92.86%)
Mutual labels:  ecs, entity-component-system
Usagi
A hierarchical component entity system based game engine
Stars: ✭ 44 (+214.29%)
Mutual labels:  ecs, entity-component-system
LockstepECS
Fast Lockstep ECS Framework
Stars: ✭ 177 (+1164.29%)
Mutual labels:  ecs, dots
Learning-Unity-ECS
A bunch of small Unity projects where I explore and learn Unity's new ECS and Job System.
Stars: ✭ 60 (+328.57%)
Mutual labels:  ecs, entity-component-system
echo
Super lightweight Entity Component System framework for Haxe
Stars: ✭ 41 (+192.86%)
Mutual labels:  ecs, entity-component-system
ECS-Phyllotaxis
Learning ECS - 100k Cubes in Phyllotaxis pattern
Stars: ✭ 17 (+21.43%)
Mutual labels:  ecs, entity-component-system
UGUIDOTS
Converting UGUI to be DOTS compliant
Stars: ✭ 105 (+650%)
Mutual labels:  data-oriented-design, entity-component-system
harmony-ecs
A small archetypal ECS focused on compatibility and performance
Stars: ✭ 33 (+135.71%)
Mutual labels:  ecs, entity-component-system

Contributors Forks Stargazers Issues MIT License LinkedIn GitHub followers


Multiplayer Applications and Games Project
on Unity DOTS Architecture

This project was carried out as an integral part of my bachelor's degree thesis in Computer Engineering, concerning the new Unity DOTS architecture. The goal of the paper, in addition to analyzing the new data-oriented layout provided by the ECS-based model, was to create a working multiplayer game prototype made entirely using DOTS.
Explore the docs »

Italiano · View Demo · Thesis · Presentation · Report Bug | Request Feature

Table of Contents

  1. About The Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Contributing
  6. License
  7. Contact
  8. Acknowledgements

About The Project

Data-Oriented Technology Stack (DOTS) is a set of libraries created by Unity over the last few years, which is still under development.
DOTS proposes to replace the old architecture of the game engine, that was based on a component model (GameObject + MonoBehaviour), with a new one based on ECS (Entities, Components, Systems). The goal is to obtain an architecture that is not limited by the objective-oriented programming, which is known to have several pifalls and problems, mainly related to polymorphism, inheritance chains and reference types. In this regard, through a data-oriented layout, DOTS allows to obtain performance by default, as the code becomes organized by the separation between data (inside the components) and the behaviour (confined inside systems). Runtime "things" are no longer heavy objects, with data scattered in memory, but simple numeric indexes (representing entities), which we can compare to the keys of a database. Among the many advantages that come with this new architecture, stand out the possibility of making the most of modern CPUs, exploiting the potential of multiple cores and allowing efficient use of caches, which are not satured by the myriad of useless or unnecessary data present in objects. Moreover, thanks to the separation logic, the code that developers write becomes a good low-level approximation of an already correct and efficient solution, which therefore doesn't need, if not in rare cases, to be optimized.
The main packages used to make the prototype are:

The following images show an example run of the prototype, with an headless server and two connected clients: the first one is running in the Unity editor, the second one is a standalone application running on a different computer. Using the NetCode package, when entering PlayMode in the editor, Unity runs the server, a client and an arbitrary number of thin clients (in this case we didn't set any of those).

EditorGIF StandaloneGIF
PC1: Unity Editor PC2: Standalone Build

Built With

Getting Started

To get a local copy up and running follow these simple steps.

Prerequisites

  • Git
  • Unity Hub
  • Unity 2020.2.1 or higher

Installation

  1. Install Git at Download Git.
  2. Clone the repo.
    git clone https://github.com/mikyll/UnityDOTS-Thesis
  3. Download Unity Hub at Download Unity.
  4. Install a proper Unity version (2020.2.1 or higher) at Download Archive or from Unity Hub.
  5. Add the project directory on Unity Hub: Projects > Add > Select Directory.

Usage

To test the prototype in multiplayer you can create a build for a standalone client, then enter PlayMode in the editor and connect the standalone application; otherwise you can create one build for the server and one for the client and connect several clients to the server.

For more examples, please refer to the Documentation.

Roadmap

See the open issues for the full list of proposed features (and known issues).

Open Issues

  • The third person camera sometime starts flickering.
  • Physics simulations with dynamic entities are not synchronized between different clients.
  • Standalone builds sometime crash.

Future developments

  • Clients disconnection handle.
  • Main menu where and pre-match lobby.
  • Player scoreboard.
  • Inventory mechanic.

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project.
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature).
  3. Commit your Changes (git commit -m 'Add some AmazingFeature').
  4. Push to the Branch (git push origin feature/AmazingFeature).
  5. Open a Pull Request.

License

Distributed under the MIT License. See LICENSE for more information.

Contact

Michele Righi - [email protected]

Project Link: https://github.com/mikyll/UnityDOTS-Thesis

Acknowledgements

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].