Unity integration for ECS framework.
Tested on unity 2018.1 (dependent on Unity engine) and contains assembly definition for compiling to separate assembly file for performance reason.
Dependent on ECS framework - ECS framework should be imported to unity project first.
Integration can be processed with one call of LeopotamGroup.Ecs.UnityIntegration.EcsWorldObserver.Create()
metod - this call should be wrapped to #if UNITY_EDITOR
preprocessor define:
public class Startup : MonoBehaviour {
EcsSystems _systems;
void Start () {
var world = new EcsWorld ();
#if UNITY_EDITOR
UnityIntegration.EcsWorldObserver.Create (world);
#endif
_systems = new EcsSystems(world)
.Add (new RunSystem1());
// Additional initialization here...
_systems.Initialize ();
}
}
Observer must be created before any entity will be created in ecs-world.
Integration can be processed with one call of LeopotamGroup.Ecs.UnityIntegration.EcsSystemsObserver.Create()
metod - this call should be wrapped to #if UNITY_EDITOR
preprocessor define:
public class Startup : MonoBehaviour {
EcsSystems _systems;
void Start () {
var world = new EcsWorld ();
#if UNITY_EDITOR
UnityIntegration.EcsWorldObserver.Create (world);
#endif
_systems = new EcsSystems(world)
.Add (new RunSystem1());
// Additional initialization here...
_systems.Initialize ();
#if UNITY_EDITOR
UnityIntegration.EcsSystemsObserver.Create (_systems);
#endif
}
}
By design, observer works as readonly copy of ecs world data - you can copy value, but not change it.
Custom component MyComponent1
:
public enum MyEnum { True, False }
public class MyComponent1 {
public MyEnum State;
public string Name;
}
Inspector for MyComponent1
(should be placed in Editor
folder):
class MyComponent1Inspector : IEcsComponentInspector {
Type IEcsComponentInspector.GetFieldType () {
return typeof (MyComponent1);
}
void IEcsComponentInspector.OnGUI (string label, object value, EcsWorld world, int entityId) {
var component = value as MyComponent1;
EditorGUILayout.LabelField (label, EditorStyles.boldLabel);
EditorGUI.indentLevel++;
EditorGUILayout.EnumPopup ("State", component.State);
EditorGUILayout.TextField ("Name", component.Name);
EditorGUI.indentLevel--;
}
}
The software released under the terms of the MIT license. Enjoy.
Its free opensource software, but you can buy me a coffee: