본문 바로가기

Unity/DOTS

DOTS 학습을 위한 기초 정리 #4 구성 요소(Component)

반응형

참고 문헌 : https://docs.unity3d.com/Packages/com.unity.entities@0.0/manual/ecs_components.html

 

Component

구성 요소(Component)는 Entity Component System 아키텍처의 세 가지 주요 요소 중 하나로 게임이나 프로그램의 데이터를 나타냅니다. 엔티티(Entity) 는 본질적으로 구성 요소 컬렉션을 색인화하는 식별자이며, 시스템(System) 이 동작을 제공합니다.

구체적으로 ECS의 구성 요소는 다음 마커 인터페이스 중 하나가있는 구조체입니다.

  • IComponentData
  • ISharedComponentData
  • ISystemStateComponentData
  • ISharedSystemStateComponentData

EntityManager는 엔티티에 나타나는 구성 요소의 고유 한 조합을 Archetypes으로 구성 합니다. 동일한 Archetype을 가진 모든 엔티티의 구성 요소를 청크(Chunk) 라는 메모리 블록에 함께 저장합니다 . 주어진 청크의 엔티티는 모두 동일한 구성 요소 Archetype을 갖습니다.

 

공유된 구성 요소(Shared Components)는 특수한 종류의 데이터 구성 요소로서 공유 구성 요소의 특정 값 (해당 Archetype과 함께)을 기반으로 엔티티를 세분화하는 데 사용할 수 있습니다. 엔티티에 공유 구성 요소를 추가하면 EntityManager는 동일한 공유 데이터 값을 가진 모든 엔티티를 동일한 청크에 배치합니다. 공유된 구성 요소를 사용하면 시스템이 엔티티와 같이 처리 할 수 ​​있습니다. 예를 들어, Hybrid.rendering 패키지의 일부인 Rendering.RenderMesh 공유된 구성 요소  mesh , material , receiveShadows렌더링 할 때 모든 필드에 대해 동일한 값을 가진 모든 3D 객체를 처리하는 것이 가장 효율적입니다. 이러한 속성은 공유 구성 요소에 지정되므로 EntityManager는 일치하는 엔티티를 메모리에 배치하여 렌더링 시스템이 효율적으로 반복 할 수 있도록합니다.

 

참고 : 공유된 구성 요소를 사용하면 Archetype 및 각 공유된 구성 요소 필드의 모든 고유 값을 기반으로 필요한 메모리 청크 수의 조합 확장이 포함되므로 불량 청크 사용이 발생할 수 있습니다. 공유 구성 요소에 불필요한 필드를 추가하지 마십시오. Entity Debugger  사용 하여 현재 청크 사용을 확인하십시오.

 

엔티티에서 컴포넌트를 추가하거나 제거하거나 SharedComponent의 값을 변경하면 EntityManager는 엔티티를 다른 청크로 이동하여 필요한 경우 새 청크를 작성합니다.

 

시스템 상태 구성 요소는 일반 구성 요소 또는 공유된 구성 요소 처럼 동작합니다. 단, Entity Manager는 엔티티를 파괴할 때 시스템 상태 구성 요소를 제거하지 않고 제거될 때까지 엔티티 ID를 재사용하지 않습니다. 이러한 동작 차이를 통해 시스템이 내부 상태 또는 사용 가능한 리소스를 제거할 수 있습니다.

 

 

 

#정리

 1. 컴포넌트란 '데이터'에 해당하는 부분이다.

 2. 컴포넌트의 종류는 다음과 같다.

   가) 일반 컴포넌트 - 자신을 포함한 엔티티에게만 영향을 끼치는 데이터

   나) 공유된 일반 컴포넌트 - 자신을 포함하고 있는 엔티티 그룹에게 영향을 끼치는 데이터

   다) 시스템 상태 컴포넌트

   라) 공유된 시스템 상태 컴포넌트

3. EntityManager는 엔티티들이 포함하고있는 컴포넌트들의 고유조합을 Archetype으로서 구성한다.

4. 동일한 Archetype(동일한 컴포넌트 조합)을 갖고 있는 그룹을 Chunk 메모리 블록으로 구성한다.

5. 공유된(Shared) 구성 요소들은 엔티티를 세분화 하는데 사용된다.

6. 공유된(Shared) 구성 요소를 사용하면 Chunk의 확장을 요하므로 불량 처크가 발생할 수 있다.

7. 이쯤되면 눈치채겠지만 분류를 위한 것들은 상태에 변화가 오면 분류작업을 시작한다.

8. 시스템 상태 구성 요소는 일반적인 구성요소 처럼 동작하지만, 엔티티의 파괴 시점엔 엔티티 및 일반적인 컴포넌트들이 완전히 제거될 때 까지 기다리며 재사용하지 않는다. 이러한 차이를 통해 시스템 내부 상태 및 리소스를 제거할 수 있다.

반응형