ACTORS is a complete game framework with multiscene editing, game object pooling and ECS ( entity-component-system ) data-driven approach for game logic explicitly built for Unity3d. It is used to ease the pain of decoupling data from behaviors without tons of boilerplate code and without unnecessary overhead.
Features- ECS events ( can be extended with Unirx )
- Very lightweight ECS syntax
- Actors ( visual entity composer in the Unity Inspector window )
- Built-in support for pooling
- Built-in support for Unity multiscene editing
- Built-in support for plugins with a pluggable wrapper that you can share with others/through projects
- Built-in support for updates through ITick, ITickFixed, ITickLate - ( faster than Unity Update methods )
- Signals ( in-memory publish/subscribe system and effectively replace Unity3d SendMessage )
- Tags ( add simple tags to entities to define states )
- Editor extensions ( foldout group in the inspector and tags editing )
- Numerous monobehavior components to help interact with the framework
- Templates for creating scriptable objects
- Game console plugin for commands and cheats
- Framework can be extended with ODIN inspector
Requirements- Unity 2018 and higher
How to InstallFrom packages- Create a new Unity Project
- Open the manifest.json file in the Packages folder inside of the Project
- Add
"com.pixeye.ecs": "https://github.com/dimmpixeye/ecs.unity.git",
- Press Tools->Actors->Update Framework[GIT] in Unity to get new update when needed
From Unity- Download from
https://github.com/dimmpixeye/ecs/releases Documentation *
Examples*
Wiki
Simple code showcase
using UnityEngine;
namespace Pixeye
{
public class ProcessingPlayer: ProcessingBase, ITick
{
Group<ComponentPlayer, ComponentObject> groupPlayers;
Group<ComponentPlayer, ComponentWeapon, ComponentObject> groupPlayersWithWeapon;
public void Tick()
{
foreach (var entity in groupPlayers)
{
var cPlayer = entity.ComponentPlayer();
Debug.Log(string.Format("{0} with id {1}", cPlayer.name, entity));
}
foreach (var entity in groupPlayersWithWeapon)
{
var cPlayer = entity.ComponentPlayer();
var cWeapon = entity.ComponentWeapon();
Debug.Log(string.Format("{0} with id {1} holds {2}", cPlayer.name, entity, cWeapon.name));
}
}
}
}