ECS – System concepts
https://docs.unity3d.com/Packages/com.unity.entities@1.3/manual/concepts-systems.html
![](https://lycos7560.com/wp-content/uploads/2025/02/image-1.png)
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 인수를 사용하여 시스템 그룹의 끝에서 실행되도록 설정된 엔티티 명령 버퍼 시스템입니다. |