A4Room
← Devlog 목록

[Unity] DOTS 성능 최적화 단계별 비교

Unity DOTS 노트 시리즈

티스토리 13 이미지 1

Unity 성능 최적화 단계별 비교: DOTS ECS, Job System, Burst Compile의 차이점은?

Unity로 게임을 개발하다 보면 성능 최적화에 대한 고민은 피할 수 없습니다. Unity의 최신 아키텍처인 DOTS(Data-Oriented Technology Stack)는 이런 고민을 해결해줄 수 있는 강력한 도구입니다. 하지만 실제 개발 상황에서는 DOTS를 전부 도입하는 것이 어렵거나 불필요한 경우도 있죠.

그래서 이번 글에서는 다음과 같은 4가지 시나리오를 기준으로 성능 구조를 비교해보겠습니다:

✅ 1번과 2번의 차이는 무엇일까?

1번은 기존 Unity 스타일의 개발 방식입니다. MonoBehaviour 중심으로 모든 로직이 돌아가고, Unity의 GameObject/Component 시스템만을 사용합니다. Transform.position += ... 이런 식으로 객체를 직접 조작하죠.

2번DOTS의 ECS(Entity Component System) 구조를 사용하지만, Job System이나 Burst 없이 메인 스레드에서만 실행하는 경우입니다. 즉, IComponentData, SystemBase, EntityQuery 등 ECS 기반 구조로 설계는 했지만, Job.Schedule() 또는 BurstCompile 없이 CPU 한 코어만을 사용합니다.

1번과 비교하여 2번은 struct 기반 데이터를 사용하므로, GC(Garbage Collecting)가 거의 발생하지 않고 런타임 성능이 보장됩니다.

💥 Job System을 사용하지만 Burst Compile은 하지 않는 경우

IJob, IJobParallelFor, IJobEntity 등을 사용해서 병렬 처리를 구현하지만, Burst Compiler를 적용하지는 않은 상태입니다.

public partial struct MoveJob : IJobEntity {
    public float deltaTime;

    public void Execute(ref LocalTransform transform, in MoveSpeed speed) {
        transform.Position += new float3(0, 0, speed.Value * deltaTime);
    }
}

⚡️Burst Compile까지 사용하는 경우

DOTS ECS + Job System + BurstCompile까지 결합한 최고의 성능 구조입니다. SIMD 명령어, LLVM 최적화 등을 통해 CPU 레벨에서 극한의 최적화가 이루어집니다.

GameManager.Instance 같은 싱글톤 접근

💡 정리: 4단계 성능 비교

구분 DOTS ECS Job System Burst 사용 병렬 처리 최적화 수준
1번 낮음
2번 중간 이하
3번 중간 이상
4번 최고