Home

Awesome

ME.BECS now is available https://github.com/chromealex/ME.BECS

ME.ECS

<a href="https://github.com/chromealex/ecs"><img src="Docs/ME.ECS-logo-128.png" width="150px" height="150px" align="left" /></a>

<div><h4>ME.ECS - it's ECS implementation for Unity Engine with full state automatic rollbacks. In general ME.ECS could be used for multiplayer real-time strategy games (or any rudp/tcp-based) because of Network support out of the box with automatic rollbacks. You can set up tick time for your game and ME.ECS will store your state and automatically sync game instances using minimum traffic (just user RPC calls, no full game sync required).</h4></div>

License: MIT <a href="https://github.com/chromealex/ecs"><img src="https://img.shields.io/github/package-json/v/chromealex/ecs-submodule?style=flat&color=blue" /></a> <a href="https://github.com/chromealex/ecs"><img src="https://img.shields.io/github/last-commit/chromealex/ecs-submodule?style=flat&color=yellow" /></a>

Installation

Warning This repository not always contains actual submodule, so you should check the latest changes in submodule

<details> <summary><h4>Using submodule</h4></summary>
  1. Download or add as a submodule this repository https://github.com/chromealex/ecs-submodule.
  2. Create an empty file called csc.gen.rsp inside Assets folder. Your file should have the path Assets/csc.gen.rsp.
  3. Add packages (see Package Dependencies section).
  4. Be sure your submodule folder has a name Assets/ecs-submodule or Assets/ECS-submodule.
  5. You are ready to Initialize Project.
</details><details> <summary><h4>Using Unity Package Manager</h4></summary>
  1. Create an empty file called csc.gen.rsp inside Assets folder. Your file should have the path Assets/csc.gen.rsp.
  2. Open Packages/manifest.json file.
  3. Add ME.ECS to your dependencies section:
{
  "dependencies": {
    [HERE ARE OTHER PACKAGES]
    "com.me.ecs": "https://github.com/chromealex/ecs-submodule.git"
  }
}
  1. You are ready to Initialize Project.
</details>

Package Dependencies

    "com.unity.collections": "1.2.3",
    "com.unity.ui": "1.0.0-preview.18",
    "com.unity.addressables": "1.19.9",
    "com.unity.burst": "1.6.5",
    "com.unity.mathematics": "1.2.6",
    "com.unity.localization": "1.0.5",
    "com.unity.profiling.core": "1.0.0"

Example Repository

<div>https://github.com/Oleg-Grim/Pong-Out</div> <div>Pong Out - a classic pong game with fully functioning multiplayer made with ME.ECS</div>

Submodule Repository

https://github.com/chromealex/ecs-submodule

FAQ

FAQ

Glossary

LinkDescription
Video TutorialsHere are some links to youtube channel which shows how to use some features
ClassesAll classes and structures used in ME.ECS
Memory AllocatorHow to use memory allocator
Deterministic OperationsDeterministic Operations like Random and GetHashCode in collections
BurstHow to use burst
World OperationsHow to operate the world
Default ModulesDescribe default modules included in ME.ECS by default
Create WorldDescribe how to create new world and set up your empty project
Create FeatureHow to create new feature
Create SystemHow to create new system
Create ModuleHow to create new module
Create EntityHow to create new entity
Create ComponentHow to create new component
Create FilterHow to create new filter
Create MarkerHow to create new marker
Create TimersHow to create timers
Create ViewsHow to register prefab in ME.ECS
Send User InputHow to send user inputs to systems
Send UI EventsHow to send events from UI to systems
Receive User InputHow to receive markers in systems
Send and Receive RPC CallsHow to register object in NetworkModule, send and receive RPC packages
DefinesDefine usage
Data ConfigsHow to create and use data configs
Global EventsHow to create and use global events
Code GeneratorsCode Generators usage

ME.ECS Add-ons

Note To install modules you can use ME.ECS/Add-ons menu (all packages listed here: https://github.com/chromealex/ecs-submodule/blob/master/Addons.md).

<div align="center">
<h3>Pathfinding</h3>
License: MIT <a href="https://github.com/chromealex/me.ecs-pathfinding"><img src="https://img.shields.io/github/package-json/v/chromealex/me.ecs-pathfinding?style=flat&color=blue" /></a> <a href="https://github.com/chromealex/me.ecs-pathfinding"><img src="https://img.shields.io/github/last-commit/chromealex/me.ecs-pathfinding?style=flat&color=yellow" /></a><br>Pathfinding implementation: AStar, FlowField, NavMesh<br>https://github.com/chromealex/me.ecs-pathfinding
                                                                                                               
</div> <div align="center">
<h3>Physics</h3>
License: Unity <a href="https://github.com/chromealex/me.ecs-physics"><img src="https://img.shields.io/github/package-json/v/chromealex/me.ecs-physics?style=flat&color=blue" /></a> <a href="https://github.com/chromealex/me.ecs-physics"><img src="https://img.shields.io/github/last-commit/chromealex/me.ecs-physics?style=flat&color=yellow" /></a><br>Unity Physics port (DOTS) with fixed-point math<br>https://github.com/chromealex/me.ecs-physics
                                                                                                               
</div> <div align="center">
<h3>Input</h3>
License: MIT <a href="https://github.com/chromealex/me.ecs-input"><img src="https://img.shields.io/github/package-json/v/chromealex/me.ecs-input?style=flat&color=blue" /></a> <a href="https://github.com/chromealex/me.ecs-input"><img src="https://img.shields.io/github/last-commit/chromealex/me.ecs-input?style=flat&color=yellow" /></a><br>Input implementation for mouse/touch<br>https://github.com/chromealex/me.ecs-input
                                                                                                               
</div> <div align="center">
<h3>Destroy</h3>
License: MIT <a href="https://github.com/chromealex/me.ecs-destroy"><img src="https://img.shields.io/github/package-json/v/chromealex/me.ecs-destroy?style=flat&color=blue" /></a> <a href="https://github.com/chromealex/me.ecs-destroy"><img src="https://img.shields.io/github/last-commit/chromealex/me.ecs-destroy?style=flat&color=yellow" /></a><br>Additional API to destroy entities by the time<br>https://github.com/chromealex/me.ecs-destroy
                                                                                                               
</div> <div align="center">
<h3>Goal-Oriented Action Planning (GOAP)</h3>
License: MIT <a href="https://github.com/chromealex/me.ecs-goap"><img src="https://img.shields.io/github/package-json/v/chromealex/me.ecs-goap?style=flat&color=blue" /></a> <a href="https://github.com/chromealex/me.ecs-goap"><img src="https://img.shields.io/github/last-commit/chromealex/me.ecs-goap?style=flat&color=yellow" /></a><br>Goal-Oriented Action Planning (GOAP) implementation<br>https://github.com/chromealex/me.ecs-goap
                                                                                                               
</div> <div align="center">
<h3>Data Config Generator</h3>
License: MIT <a href="https://github.com/chromealex/me.ecs-dataconfiggenerator"><img src="https://img.shields.io/github/package-json/v/chromealex/me.ecs-dataconfiggenerator?style=flat&color=blue" /></a> <a href="https://github.com/chromealex/me.ecs-dataconfiggenerator"><img src="https://img.shields.io/github/last-commit/chromealex/me.ecs-dataconfiggenerator?style=flat&color=yellow" /></a><br>Data Config Generator for Google Spreadsheets<br>https://github.com/chromealex/me.ecs-dataconfiggenerator
                                                                                                               
</div> <div align="center">
<h3>Addressable Views</h3>
License: MIT <a href="https://github.com/chromealex/me.ecs-viewaddressables"><img src="https://img.shields.io/github/package-json/v/chromealex/me.ecs-viewaddressables?style=flat&color=blue" /></a> <a href="https://github.com/chromealex/me.ecs-viewaddressables"><img src="https://img.shields.io/github/last-commit/chromealex/me.ecs-viewaddressables?style=flat&color=yellow" /></a><br>Additional API to be able load addressables<br>https://github.com/chromealex/me.ecs-viewaddressables
                                                                                                               
</div> <div align="center">
<h3>Collections: DataObject</h3>
License: MIT <a href="https://github.com/chromealex/me.ecs-collections-dataobject"><img src="https://img.shields.io/github/package-json/v/chromealex/me.ecs-collections-dataobject?style=flat&color=blue" /></a> <a href="https://github.com/chromealex/me.ecs-collections-dataobject"><img src="https://img.shields.io/github/last-commit/chromealex/me.ecs-collections-dataobject?style=flat&color=yellow" /></a><br>DataObject collections<br>https://github.com/chromealex/me.ecs-collections-dataobject
                                                                                                               
</div> <div align="center">
<h3>Collections: Intrusive</h3>
License: MIT <a href="https://github.com/chromealex/me.ecs-collections-intrusive"><img src="https://img.shields.io/github/package-json/v/chromealex/me.ecs-collections-intrusive?style=flat&color=blue" /></a> <a href="https://github.com/chromealex/me.ecs-collections-intrusive"><img src="https://img.shields.io/github/last-commit/chromealex/me.ecs-collections-intrusive?style=flat&color=yellow" /></a><br>Intrusive collections<br>https://github.com/chromealex/me.ecs-collections-intrusive
                                                                                                               
</div>

Discord

https://discord.gg/SxJJPPNsSf

Contact Me

<a href="https://t.me/chromealex"><img src="https://img.shields.io/badge/telegram-chromealex-cyan" /></a></br> <a href="mailto:chrome.alex@gmail.com"><img src="https://img.shields.io/badge/e--mail-chrome.alex%40gmail.com-black" /></a></br> <a href="https://www.facebook.com/chrome.alex"><img src="https://img.shields.io/badge/facebook-chrome.alex-blue" /></a></br>

Inspired by

<img src="Docs/Projects/game-mw2.png" width="650" /><br> <b>Mushroom Wars 2</b><br> Steam, iOS, Android, Switch, XBOXOne, PS4

Projects

<img src="Docs/Projects/game-wildwars.png" width="650" /><br> <b>Wild Wars</b><br> Mobile (iOS/Android)

<img src="Docs/Projects/game-qubix.png" width="650" /><br> <b>Qubix Infinity</b><br> WebGL

<img src="Docs/Projects/game-unreleased1.png" width="650" /><br> <b>Unreleased Project #1</b><br> Mobile (iOS/Android)