ECS – System concepts
https://docs.unity3d.com/Packages/com.unity.entities@1.3/manual/concepts-systems.html

System concepts
System의 역할
System은 컴포넌트 데이터를 읽고, 수정하여 프레임마다 업데이트하는 역할을 수행OnUpdate()가 매 프레임 호출되며, Entity 데이터를 갱신함SystemBase(관리형 시스템)와ISystem(비관리형 시스템) 두 가지 유형이 있음
System의 유형
| 시스템 유형 | 설명 |
|---|---|
SystemBase | C# 클래스 기반, 관리형 시스템 (GC 영향 있음) |
ISystem | 구조체 기반, 비관리형 시스템 (성능 최적화) |
EntityCommandBufferSystem | Entity 생성/삭제 등의 구조적 변경을 최적화하는 시스템 |
ComponentSystemGroup | 여러 시스템을 그룹화하여 실행 순서 제어 |
System 실행 순서 (System Groups)
- ECS는 시스템을 Auto Bootstrap하며, 기본적으로 3가지 그룹으로 실행됨.
(Auto Bootstrap – 시스템을 자동으로 생성하고 실행하는 과정)
| 시스템 그룹 | 설명 |
|---|---|
InitializationSystemGroup | 초기화 관련 시스템 실행 (프레임 시작 시) |
SimulationSystemGroup | 대부분의 게임 로직이 실행되는 기본 그룹 |
PresentationSystemGroup | 렌더링과 관련된 시스템 실행 (프레임 마지막) |
- 특정 그룹에서 실행되도록 하려면
[UpdateInGroup(typeof(그룹))]속성을 사용.
SystemBase 예제 (관리형 시스템)
using Unity.Burst;
using Unity.Entities;
using Unity.Transforms;
using Unity.Mathematics;
using UnityEngine;
// [UpdateInGroup(typeof(SimulationSystemGroup))] // 특정 그룹에서 실행 가능
public partial class MoveSystem : SystemBase
{
protected override void OnUpdate()
{
float deltaTime = SystemAPI.Time.DeltaTime; // 현재 프레임의 Delta Time
Entities.ForEach((ref LocalTransform transform) =>
{
transform.Position += new float3(1, 0, 0) * deltaTime; // X축 이동
}).ScheduleParallel();
}
}
ISystem 예제 (비관리형 시스템)
using Unity.Burst;
using Unity.Entities;
using Unity.Transforms;
using Unity.Mathematics;
// 성능 최적화를 위해 [BurstCompile] 적용
[BurstCompile]
public partial struct MoveSystem_ISystem : ISystem
{
public void OnCreate(ref SystemState state) { } // 초기화
public void OnDestroy(ref SystemState state) { } // 시스템 종료 시 실행
public void OnUpdate(ref SystemState state)
{
float deltaTime = SystemAPI.Time.DeltaTime;
foreach (var transform in SystemAPI.Query<RefRW<LocalTransform>>())
{
transform.ValueRW.Position += new float3(1, 0, 0) * deltaTime;
}
}
}
System 실행 순서 제어 (System Group 활용)
using Unity.Entities;
[UpdateInGroup(typeof(InitializationSystemGroup))] // 초기화 단계에서 실행
public partial class InitSystem : SystemBase
{
protected override void OnUpdate()
{
UnityEngine.Debug.Log("초기화 시스템 실행됨!");
}
}
Inspecting systems
시스템 창을 사용하여 각 세계의 시스템 업데이트 순서를 검사하고 시스템 그룹의 전체 계층을 볼 수 있습니다.
자세한 내용은 Systems window reference를 참조하세요.
에디터에서 Systems
편집기에서 다음 아이콘은 다양한 유형의 시스템을 나타냅니다.
Entities windows와 Inspectors를 사용하면 이를 확인할 수 있습니다.
| Icon | Represents |
|---|---|
![]() | A system group |
![]() | A system |
![]() | OrderFirst 인수를 사용하여 시스템 그룹의 시작 시 실행되도록 설정된 Entity 명령 버퍼 시스템 |
![]() | OrderLast 인수를 사용하여 시스템 그룹의 끝에서 실행되도록 설정된 엔티티 명령 버퍼 시스템입니다. |






