DOTS의 가장 핵심적인 패키지.
데이터 지향 설계 원칙을 사용해 데이터를 게임 로직에서 분리시킨다. 이는 더 모듈화되고 변화에 유연한 효율적인 데이터 및 코드베이스 처리를 수행한다.
엔티티 컴포넌트 시스템(ECS)는 엔티티(Entity), 컴포넌트(Component), 시스템(System) 세 개의 요소로 이루어져 있다.
ECS는 데이터를 메모리에 효율적으로 배치하는 기법일 뿐이다. 멀티스레딩은 C# Job System에서 담당하게 된다.
엔티티들을 게임월드 내에 렌더링해주는 패키지
URP와 HDRP에서 사용 가능하다.
ECS를 사용해도 기존 GameObject를 사용해 프론트엔드 비주얼을 구현하면 해당 패키지는 필요없다.
하지만 엔티티들은 거의 대부분 해당 패키지를 이용해 그래픽을 렌더링한다.
ECS에 호환되는 멀티플레이어 네트워킹 시스템
네트워크 속도와 정확성이 매우 중요한 경쟁적 멀티플레이 시스템에서 매우 유용하게 사용 가능
서버에서 플레이어의 치팅 여부를 판별하는 등 서버의 권한이 강한 게임에서 유용하다.
넷코드에 따른 플레이어 통신 오차를 각각의 클라이언트에서 자신의 위치 등을 예측하여 보내는 기능을 편리하게 구현할 수 있다.
만약 예측 실패 등의 이유로 다른 클라이언트 간에 차이가 날 시 시뮬레이션 롤백(Simulated Rollback)을 할 수 있다. 모든 것이 순수 데이터이기 때문에 몇 틱 이전 데이터로 롤백한 후 다시 재시뮬레이션 할 수 있다.
64명 이상이 동시에 참여할 수 있는 메가시티 멀피틀레이어 샘플을 유니티 홈페이지에서 받아볼 수 있다.
DOTS Physics와 Havok Physics가 있다. DOTS Physics는 모든 유니티 유저가, Havok Physics는 유니티 프로 이상 구독자들이 사용할 수 있다.
Dots Physics
OnCollisionEnter/Stay/Exit등 물리적 상태에 대한 호출을 개발자가 직접 만들어야 한다.Havok Physics
유니티에서 멀티스레딩을 구사하는 방법 중 하나이다.
레이스 컨디션 등 멀티스레딩의 이슈들을 회피하기 위해 자동으로 스케줄링과 안전 체크를 해준다
많이, 자주 사용되거는 명령 처리 및 무거운 연산 처리에 사용하기 좋다
한 프레임 안에 멀티스레딩 작업을 완료함을 의도하고 구현되었다.
따라서 여러 프레임에 걸쳐 오랫동안 작업을 할 시에는 코루틴 혹은 비동기를 사용한다.
해당 시스템은 비관리 데이터 타입에게만 사용할 수 있다.
버스트 컴파일러로 컴파일할 수 있다.
ECS와 MonoBehaviour 둘 다 사용할 수 있다.
비관리 데이터 구조체들로 Jobs와 Burst Compiler에서 사용할 수 있다.
C/C++의 데이터 구조체들과 유사한 구조로, 개발자가 직접 메모리를 할당 및 해제해야 한다.
내장된 세이프티 체크가 있어 미리 경고를 던져준다.
컬렉션 종류들은 다음과 같다.
NativeArray : 배열NativeList : 리스트NativeQueue : 큐NativeHashMap : 해시맵Unsafe Collections : 세이프티 체크가 해제된 컬렉션들사용자가 작성한 C#코드를 네이티브 CPU코드로 컴파일해준다.
C# Job System을 적용한 코드를 더욱 빠르게 작동시켜준다.
버스트 컴파일러와 호환되는 수학적 구조들을 가진 패키지이다.
Vector3 -> float3Quaternion -> quaternion유니티에서 자주 사용하는 수학 연산들 또한 포함되어 있다. 다만 연산 이름이 조금씩 다르다.
Vector3.Magnitude -> math.Length(float3)