[Unity] DOTS - ECS ( Entity, Component, System )
ECS를 알아보기 전 DOTS에 대해 궁금한 점이 있다면 하단의 링크를 통해 알아 볼 수 있다.
https://everyday-devup.tistory.com/67
● ECS 란?
: ECS는 Entitiy, Component, System의 앞글자를 하나씩 딴 단어로, Unity에서 DOTS를 사용하기 위해 만든 아키텍쳐라고 할 수 있다.
▶ World
: Systems, Entities, Archetypes를 묶은 것으로 Unity에서는 기본적으로 Default World를 제공한다.
: 사용자가 추가로 World를 생성할 수도 있으며, World간에 참조도 가능하지만 World간의 의존성이 발생하기 때문에 권장하지 않는다.
▶ Archetype
: 공통 된 Component를 묶은 데이터, 예를 들어 Position, Rotation, Renderer 데이터를 사용하는 경우 Archetype ( Position, Rotation, Renderer )에서 데이터를 관리하고, Position, Rotation데이터를 사용하는 경우 Archetype ( Position, Rotation )에서 데이터를 관리한다.
: 데이터는 16KB Chunk 단위로 링크드 리스트로 처리된다. 이는 데이터의 삭제와 추가를 빠르게 수행하기 위함인데, 하나의 큰 배열로 처리할 경우 데이터의 삭제와 추가가 발생할 때마다 큰 배열을 정리해야하는 오버헤드가 발생하기 때문이다.
: 링크드 리스트로 관리하면 기존에 사용하던 Chunk가 가득찬 경우 새로운 Chunk를 생성하여 링크로 연결해 주면 되고, 삭제가 필요한 경우 메모리를 해제하고 링크 연결을 끊어 주기만 하면 되기 때문에 속도가 빠르다.
: 공통된 Component 중에서 특정한 Component가 사라지는 경우, 예를 들어 Position, Rotation, Renderer 가 있었는데 이중에 Renderer가 삭제되는 경우 Archetype ( Position, Rotation, Renderer )에서 Archetype ( Position, Rotation ) 으로 변경된 데이터 값이 복사되고 Archetype ( Position, Rotation, Renderer )에서의 변경된 데이터는 삭제 된다. 이 때 오버헤드가 발생하기 때문에 유의해야한다.
▶ Entity
: Component 데이터 한 묶음을 가리키는 인덱스이다.
▶ Component
: 읽고 쓰기 위한 실제 데이터이다.
▶ System
: Entitiy와 Component 조회해서 로직을 수행한다.
참고 자료 : https://www.youtube.com/watch?v=hAp5nx2_Hpg