유니티3D/DOTS

개념파악

codehunter 2025. 5. 10. 14:28


공식적으로 학습할 자료는 아래와 같다.

유니티 공식 블로그, DOTS - 유니티의 데이터 지향 기술 스택
DOTS - Unity’s Data-Oriented Technology Stack

위 사이트에서 제공하는 유니티 공식 튜터리얼 프로젝트
GitHub - Unity-Technologies/EntityComponentSystemSamples

 

유니티 코리아의 유튜브 채널 ([유니티 TIPS] 유니티의 DOTS 시스템, ECS 신규 업데이트!)
https://www.youtube.com/watch?v=anoA9d2vn9A

 

유니티 코리아의 유튜브 채널 초기 개념(약간 오래된 영상이지만 개념 파악용으로 좋음)

https://www.youtube.com/watch?v=hAp5nx2_Hpg

 

DOTS 에 대해 잘 정리한 다른사람의 블로그

https://usingsystem.tistory.com/539

 

 

 

 

크게 보면 DOTS의 기본 개념은 데이터와 연산을 분리해서 처리하는 방법론이다. 

 

직관적으로 느낄 수 있게 코드로 비교해보면 다음과 같다.

 

이건 기존 방식

public class MoveScript : MonoBehaviour
{
    float Speed;

    void Update()
    {
        transform.position.x += Speed;
    }
}

 

이것이 ECS (유니티에서 구현할 프레임워크)로  구현된 데이터(컴포넌트)와 연산(시스템)이 분리된 방식

// 컴포넌트
struct Speed : IComponentData
{
    public float Speed;
}

// 시스템
partial struct MoveSystem : ISystem
{
    // 작동하는 코드...
}

 

DOTS는 객체를 구성하는 데이터들을 동일한 것끼리 모아서 관리하고 접근하는 디자인이다. 데이터를 모아서 CPU에 전달하기 때문에 병렬처리, 모듈화등의 장점들이 있다.

 

이는 기존의 OOP개념이 기능이 추가될 때마다 복잡해지고, CPU보다는 메모리를 많이 사용하는 단점등이 들어나기 때문에 이를 극복하기 위하여 나온것이다.

 

DOTS도 종류가 있다고 하는데 

1. 스파스 셋 : 엔티티를 구성하는 각 구성요소 별로 묶어서 관리하는 방식으로 마인크래프트, 오버워치가 이걸 이용했다고 함.

예를들면 게임에 필요한 모든 컴포넌트들을 하나로 묶어서 거기서 뽑아서 조립해서 객체를 만들어 쓰는 방식

 

2. 아키타입 : 엔티티의 조합 타입별로 묶어서 관리하는 방식인데 언리얼, 유니티가 이 방식으로 구성했다고 함.

예를들면 컴포넌트를 다 적용한 일반 캐릭터 그룹, 특정 컴포넌트가 빠진 몬스터 캐릭터 그룹, 더미 캐릭터 그룹등의 종류별로 묶어서 관리한다고 생각하면 됨.

 

이것을 위해 유니티에서는 DOTS의 목표를 크게 다음과 같은 주제에 중점을 두었다.

1. 메모리 최적화

2. 멀티스레드 최적화 -> 이를 위해 Jobs System을 도입

3. 성능 최적화 -> 컴파일러 단계에서 코드 최적화를 위해 Burst를 도입

 

그리고 위 모든 기능을 적용하기 위한 프레임워크가 바로 ESC라는 것이다. 이것은 기존의 GameObject와 호환이 필요하면서도 DOTS의 개념을 유니티로 가져오기 위해 만든 프레임워크이다.

 

이렇게 ECS, Jobs System, Burst Compiler 기술이 3대 핵심 기술인데 이 기술들은 독립적이라 반드시 함께 사용할 필요는 없다. 하지만 이 세가지를 함께 사용하면 성능이 극대화된다.

 

메인페이지에서 이 3가지 기술을 기술별로 따로 정리했다.

 

메인페이지로

 

3가지 기술 페이지

ECS

'유니티3D > DOTS' 카테고리의 다른 글

DOTS에 관하여 - 메인  (0) 2025.05.10