그냥 제가 공부하면서 많이 참고한 것들부터 말씀드립니다.


1. 유니티 공식 디스코드의 DOTS 채널

dots를 이용한 상업 프로젝트 개발자, 유니티 본사의 dots 엔지니어, ecs 라이브러리 에셋 제작자들, 인디 게임 개발자들이 밤낮없이 활발히 토론을 나누는 곳입니다. 엥간한 궁금점을 이 채널에 진작에 질문자가 있었으니 검색을 활용하면 실마리 정도는 얻을 수 있습니다. 아무리 초보적인 질문을 하더라도 대답은 해주지만, 어려운 말을 쓰거나 매우 거시적인 관점에서 대충 방향만 짚어 줄 때도 있습니다. 세부적인 코드를 아예 복붙 해서 질문하세요.


2. 유니티 포럼의 dots 토론장

초보 질문자들이 쓴 글이 99%입니다. 하지만 그 1%의 답변은 오직 여기서만 찾을 수 있습니다. 좀 더 초보 친화적입니다.


3. 유니티 dots 깃허브

여러가지 예제와 엔지니어의 기초 강의가 있습니다. 여기서 시작하는 것을 강력히 추천합니다.


4. 유니티 코리아 유튜브

가끔 dots나 ecs에 대해 다룹니다. 이론 학습에 꽤 도움이 됩니다.


5. 애니메이션

가장 장벽이 높습니다. 순수 dots 방법으로 실현하려면 외부 라이브러리를 사용하는 것을 추천합니다.

3d 애니메이션: Rukhanka. 유니티 에셋 스토어에 있습니다. 유료이지만 상업 프로젝트에 사용해도 손색이 없는 완성도입니다.

2d 스프라이트 애니메이션: Nsprite. 스프라이트 시트 기반 애니메이션 라이브러리입니다. 좀 더 쉽게 사용할 수 있게 기본 기능만 지원하는 Nsprite foundation도 같이 사용하는 것을 강력히 추천합니다. 상업 프로젝트에 쓰려면 좀 많이 개선을 해야 합니다. 제가 개발한 게임도 Nsprite를 사용했습니다.


순수 dots방법을 포기한다면 굉장히 편해집니다. 이걸 보통 하이브리드라고 부릅니다. state machine의 논리적 연산은 dots에서 진행하는 대신, 눈에 보이는 애니메이터만 Entity가 아닌 GameObject로 만들면 됩니다. 대신 최적화 면에서 만 단위부턴 사양을 타게 됩니다.


6. 절대!

개발 중간에 dots 관련 패키지의 버전을 업데이트하지 마십시오!


7. 창모드는 exclusive로

안 그럼 빌드가 갑자기 터집니다. 제가 쓴 다른 글에서 자세히 적었습니다.


8. NativeContainer를 상속하는 자료형들은 각자가 선언된 System에서만 존재하며, 그 지속시간은 Allocator.temp, tempjob, Persistent로 결정됩니다. 각각 1프레임, 4프레임(대략), 영구적입니다. 지속시관과 무관하게, 다 썼으면 Dispose를 하는 것을 강력히 권장합니다. 메모리 누수의 원인이 됩니다.



++추가

9. 씬을 바꿀 때, Entity World 자체를 Dispose하는 것을 추천합니다. 그리고 Entity World를 다시 만들어야 할 때는 DefaultWorldInitialization.Initialize()를 하면 디폴트값으로 다시 생성됩니다.

이렇게 하는 이유는 메모리 누수를 방지하기 위해서입니다. 안 그럼 실행 중인 시스템 하나하나 멈추고 UnManaged 데이터를 일일이 Dispose해야 하는데 사람의 뇌로는 불가능합니다.