Quick answer: Unity ECS SystemBase.OnUpdate not running? The system is in the wrong WorldSystemFilter group, has [DisableAutoCreation], or its RequireForUpdate condition is never met.

A movement system never runs on entities you know exist. The system either isn’t added to the world or its update gate is unmet.

WorldSystemFilter

Systems are auto-added to default worlds. [WorldSystemFilter(WorldSystemFilterFlags.LocalSimulation)] restricts a system to a specific world — if you’re only running the default world, it’s skipped.

Update Group

[UpdateInGroup(typeof(SimulationSystemGroup))]
public partial class MoveSystem : SystemBase { ... }

Without an explicit group, defaults apply — usually fine. If you specified an empty / disabled group, the system never ticks.

RequireForUpdate

RequireForUpdate<TagComponent>() in OnCreate means OnUpdate won’t fire until an entity with that tag exists. Useful, but easy to leave on while debugging the system itself.

Auto-Creation Disabled

[DisableAutoCreation] means you must create the system manually via world.GetOrCreateSystem. Often forgotten when copying from samples.

Verifying

The Systems window shows your system in the expected group, scheduled each frame, with non-zero processed entity count when entities exist.

“OnUpdate runs when the system is in an active group, not disabled, and its requirements are met.”

Use the Systems window obsessively when ECS misbehaves — it answers “is my system actually running?” in one click.