EcsHost
Docs / Core / EcsHost
Hosting scenarios and integration points for ZenECS in different environments.
Overview
ZenECS can be hosted in various environments:
- Unity: Via Unity Adapter
- Standalone .NET: Console applications, servers
- Other Engines: Godot, MonoGame, etc. (with custom adapter)
- Testing: Unit tests and integration tests
Hosting Scenarios
Unity Hosting
Use EcsDriver for automatic lifecycle:
// EcsDriver handles kernel lifecycle
var kernel = KernelLocator.Current;
var world = kernel.CreateWorld(null, "GameWorld");
Standalone .NET Hosting
Manual kernel management:
var kernel = new Kernel();
var world = kernel.CreateWorld(null, "GameWorld");
// Game loop
while (running)
{
kernel.PumpAndLateFrame(dt, fixedDelta, maxSubStepsPerFrame: 4);
}
kernel.Dispose();
Server Hosting
For game servers:
var kernel = new Kernel();
var serverWorld = kernel.CreateWorld(null, "Server", tags: new[] { "server" });
// Server loop
while (serverRunning)
{
// Process network messages
ProcessNetworkMessages(serverWorld);
// Run simulation
kernel.PumpAndLateFrame(dt, fixedDelta, maxSubStepsPerFrame: 4);
}
Testing Hosting
For unit tests:
[Test]
public void TestSystem()
{
var kernel = new Kernel();
var world = kernel.CreateWorld(null, "Test");
// Test setup
world.AddSystems([new TestSystem()]);
// Execute
kernel.PumpAndLateFrame(1f, 1f / 60f, maxSubStepsPerFrame: 4);
// Assertions
Assert.IsTrue(/* ... */);
kernel.Dispose();
}
Integration Points
Frame Bridge
Bridge engine frame callbacks:
// Unity
void Update() => kernel.BeginFrame(Time.deltaTime);
void FixedUpdate() => kernel.FixedStep(Time.fixedDeltaTime);
void LateUpdate() => kernel.LateFrame(Time.deltaTime, alpha);
// Godot
public override void _Process(float delta) => kernel.BeginFrame(delta);
public override void _PhysicsProcess(float delta) => kernel.FixedStep(delta);
Lifecycle Management
Manage kernel lifecycle:
// Initialize
var kernel = new Kernel();
var world = kernel.CreateWorld(null, "GameWorld");
// Run
kernel.PumpAndLateFrame(dt, fixedDelta, maxSubStepsPerFrame: 4);
// Cleanup
kernel.Dispose();
See Also
- Unity Adapter - Unity integration
- EcsKernel - Kernel management
- Architecture - System design