# OnUpdate()

> Implement OnUpdate() to perform the major work of this system.

## Definition

* **Type:** Method
* **Namespace:** [Unity.Entities](/engine/7000.0/script-reference/unity/entities.md)
* **Assembly:** UnityEngine.EntitiesModule

```csharp
protected abstract void OnUpdate()
```

### Remarks

By default, the system invokes `OnUpdate()` once every frame on the main thread. To skip OnUpdate if all of the system's [EntityQueries] are empty, use the [RequireMatchingQueriesForUpdateAttribute]. To limit when OnUpdate is invoked, you can specify components that must exist, or queries that match specific Entities. To do this, call RequireForUpdate@@@@1 or [ComponentSystemBase.RequireForUpdate](/engine/7000.0/script-reference/unity/entities/componentsystembase/requireforupdate.md) in the system's OnCreate method. For more information, see [ShouldRunSystem].

Use [IJobEntity] or [SystemAPI.Query](/engine/7000.0/script-reference/unity/entities/systemapi/query.md) for common iteration patterns. You can also instantiate and schedule an [IJobChunk](/engine/7000.0/script-reference/unity/entities/ijobchunk.md) instance; implement other Unity.Jobs interfaces or perform work on the main thread. If you call [EntityManager](/engine/7000.0/script-reference/unity/entities/entitymanager.md) methods that perform structural changes on the main thread, be sure to arrange the system order to minimize the performance impact of the resulting [sync points].

[sync points]: xref:concepts-structural-changes

[C# Job System]: xref:JobSystem

[IJobEntity]: xref:Unity.Entities.IJobEntity

[EntityQueries]: xref:Unity.Entities.EntityQuery

[RequireMatchingQueriesForUpdateAttribute]: xref:Unity.Entities.RequireMatchingQueriesForUpdateAttribute

[ShouldRunSystem]: xref:Unity.Entities.ComponentSystemBase.ShouldRunSystem
