Unity ECS - (2)

이장근·2023년 4월 29일
1

Unity DOTS

목록 보기
6/6

Memory Chunk

Memory Chunk는 동일한 Archetype내 속한 Entity의 Component 데이터를 메모리상에서 연속적으로 저장합니다.

Unity ECS에서 청크의 크기는 16KB로 고정되어 있으며 청크가 가득 차게되면, 같은 아키타입 내 똑같은 크기의 청크를 새로 생성합니다. 특정 순서대로 저장하지 않으며, 한 청크의 모든 엔티티는 공유 구성 요소에 대한 정확히 동일한 값을 가집니다.

Entity Query

시스템이 처리해야 할 엔티티를 식별하기 위해 엔티티 쿼리를 사용합니다.

엔티티 쿼리는 요구사항화 일치하는 컴포넌트를 찾기 위해 검색하며, 아래와 같은 요구사항을 지정 할 수 있습니다.

All — 아키타입은 All 범주의 모든 컴포넌트 유형을 포함해야 합니다. 
Any — 아키타입은 Any 범주의 적어도 하나의 컴포넌트 유형을 포함해야 합니다. 
None — 아키타입은 None 범주의 컴포넌트 유형을 포함해서는 안 됩니다. 

엔티티 쿼리는 쿼리가 필요로 하는 컴포넌트 유형의 종류가 포함된 청크의 목록을 제공합니다. 그런 다음 IJobEntityBatch를 사용하여 해당 청크에 직접 반복적으로 액세스할 수 있습니다.

Components

유니티 컴포넌트와의 차이점

Tag Component

필드가 없는 IComponentData 구조체를 태그 컴포넌트라고 합니다.
이런 Tag Component의 경우, 청크에 컴포넌트 배열을 저장하지 않습니다.
데이터가 있다면 일반적인 Unmanaged 컴포넌트와 같이 작동합니다.

Unmanaged Component 저장소 (?)

Unmanaged 컴포넌트와 달리, Managed 컴포넌트는 직접 청크에 저장되지 않습니다. 대신, 전체 World에 대한 대규모 배열에 관리 컴포넌트 클래스 인스턴스가 모두 참조되고, 청크의 관리 형식 컴포넌트 배열은 이 배열에 대한 인덱스를 저장합니다.

여러 컴포넌트 값 읽기/쓰기

• ArchetypeChunk를 사용하여 청크의 컴포넌트 배열을 직접 읽고 쓸 수 있습니다. 
• EntityQuery는 쿼리와 일치하는 청크 집합을 효율적으로 검색합니다. 
• Entities.ForEach는 EntityQuery의 생성과 사용을 편리하게 처리해줄 뿐만 아니라 
	메인 스레드나 작업 내에서 청크의 엔티티를 반복하는 것을 더욱 편리하게 만들어줍니다.


profile
Red Queen's Paradox

0개의 댓글