[Unity] 새로운 컴포넌트 시스템 ECS와 Entity

세동네·2021년 8월 11일
0
post-thumbnail

유니티는 게임 월드에 생성한 게임 오브젝트에 원하는 컴포넌트를 붙여 기능을 부여할 수 있다. 예를 들어 Rigidbody 컴포넌트를 추가하면 중력의 영향을 받아 바닥으로 떨어지기 시작하고, Rigidbody와 함께 Collider 컴포넌트를 추가하면 게임 오브젝트 간의 충돌 처리를 가능하게 한다. 이러한 컴포넌트 개념이 유니티 개발 시스템의 중심이 되고 있는데, 현재 유니티에선 새로운 컴포넌트 시스템을 개발하고 있고 이를 ECS(Entity Component System)라 한다.

이번 포스팅에선 ECS가 기존의 컴포넌트 시스템과 무슨 차이가 있고, ECS에서 사용하는 요소인 Entity가 무엇인지 간단하게 알아볼 것이다.

· 기존 컴포넌트 시스템

기존의 유니티 컴포넌트 시스템은 객체 지향(OOP)으로 설계되어 있으며, 해당 시스템의 개체인 게임 오브젝트 자체와 더해지는 컴포넌트들이 개별로 메모리에 저장된다. 이때 메모리에 연속으로 저장되는 것이 아니라 메모리의 랜덤한 위치에 저장되어 게임 오브젝트에 연결된다. 예를 들어 특정 게임 오브젝트의 Transform 컴포넌트의 Rotate() 메서드를 호출한다고 하면 Rotate를 실행할 게임 오브젝트에 먼저 접근하고 해당 게임 오브젝트가 가진 컴포넌트를 찾아가 정의된 함수를 실행하는 것이다.

· 엔티티 컴포넌트 시스템

새롭게 유니티에서 개발하고 있는 엔티티 컴포넌트 시스템(이하 ECS)은 객체 지향이 아닌 데이터 지향 기술 스택(DOTS, Data-Oriented Technology Stack)으로 설계된 시스템이다. 이름의 E(Entity)C(Component)S(System)이 해당 시스템을 구성하는 요소들로, 아래와 같이 정리할 수 있다.


  • Component - 데이터 집합
    - 요소를 이루는 데이터 집합
    - ex
    • position - 위치의 데이터만 가짐 (x,y,z)
    • rotation - 방향의 데이터만 가짐 (x,y,z)
  • Entity - 컴포넌트 집합
    - 하나의 오브젝트를 이루는 데이터 집합의 집합
    - ex
    • character - position, rotation 컴포넌트를 가짐.
  • System - 데이터들을 가공하는 작업 ( method 개념)
    - ex
    • MoveSystem - position, rotation 컴포넌트를 가진 엔티티들을 대상으로 키 입력시 position의 데이터를 변경하기만 한다.

객체를 생성하고 객체에 필요한 컴포넌트들을 하나의 데이터 셋으로 묶은 엔티티는 예를 들어 "Rigidbody, Collider, Controller"의 컴포넌트 세트를 청크라는 단위로 묶어 저장하는 것이다. ECS의 게임 오브젝트가 엔티티인 것이며, 현재 게임 오브젝트로 수행하는 작업을 새로운 시스템에서는 엔티티를 이용하여 수행하는 것이다.

엔티티를 이용하면 특정 컴포넌트에 접근하여 함수를 사용하는 것이 아니라 시스템에 접근하여 "Rigidbody, Collider, Controller를 모두 가지는 모든 엔티티를 다음과 같이 가공하겠다"고 정적으로 선언한 후 청크 리스트에 접근하여 해당하는 엔티티를 찾기만 하면 된다. 청크 리스트는 연속으로 할당된 공간이기 때문에 랜덤 액세스가 필요한 기존 컴포넌트 시스템보다 캐시 히트율이 높아져 명확하게 성능 향상을 가져올 수 있다.

즉, ECS는 오브젝트의 데이터만을 수집하고, 데이터를 적절한 함수 파이프라인에 순차적으로 동작시키는 새로운 컴포넌트 시스템이다.

· ECS를 이용한 게임 개발

ECS는 아직 개발이 한창 진행되고 있는 새로운 패러다임이기 때문에 기존 컴포넌트 클래스에 비해 자료도 없고 접근성도 좋지 않다. 또한 위에선 Rigidbody, Collider 등을 예시로 들었지만 아직 물리적 기능을 지원하지 않고 있으며 디버깅 구현도 잘 되어있지 않다. 유니티도 아직은 기존의 컴포넌트 시스템을 그대로 유지하고, 앞으로 ECS가 차츰 개발되면서도 게임 오브젝트 시스템은 유지될 것이라고 밝혔다. 공식적으로 ECS의 사용을 권장하여 새로운 유니티의 시스템이 갖춰질 때까진 지금까지 하던대로 개발하면 될 것으로 보인다.


· 참고

[1] DOTS 기술 소개: 엔티티 컴포넌트 시스템
[2] 면접 질문 정리 4 - ECS와 Job System
[3] Unity ECS (Entity Component System) Study - 1. 개요
[4] 유니티 ECS & Job System 공부 목적용 저장소

0개의 댓글