최대 54000개의 entity를 생성하고 프로파일링 중인 모습
unity editor loop를 제외하면 약 45 프레임은 안정적으로 방어할 수 있다

최대 54000개의 entity를 생성하고 프로파일링 중인 모습 unity editor loop를 제외하면 약 45 프레임은 안정적으로 방어할 수 있다

안영훈 포트폴리오 (상위 링크로 되돌아가기)

개요

제목 Unity ECS mini project
개발 기간 2026.03.30 ~ 2026.04.08 (9일)
인원 1인
깃허브
개발 환경 Unity ECS, 3D, C#, Github (Source Tree)
개발 일지 (블로그) https://blog.naver.com/dksdudgns666/224241944442

하드웨어 환경

시뮬레이션 엔진 Unity 3D Mono / ECS
노트북 기종 Msi GP75 Leopard 9SD
프로세서 Intel(R) i7 - 9750H CPU 2.60GHZ
OS Windows 11 x64
RAM 16.0 GB (8GB x 2)
그래픽 카드 0 Intel(R) UHD Graphics 630
그래픽 카드 1 NVIDIA GeForce GTX 1660 Ti전용 GPU
GPU 메모리 정보 메모리 6.0GB / 공유 GPU 메모리 7.9GB
총 GPU 메모리 13.9GB

특이사항

본 프로젝트를 진행하며 코드 리뷰/리팩터링 툴 개발을 위해 CLI agent가 적극적으로 사용되었습니다. SweeperSystem_backup.cs은 제가 작성한 코드이고, SweeperSystem.cs은 해당 툴로 리팩터링한 코드입니다. 코드 리뷰/리팩터링 툴의 품질을 확인하기 위한 용도였음을 밝힙니다.

주요 구현 내용

핵심 로직
Entity Authoring 정의 및 Baking • 데이터 정의
IComponentData 인터페이스를 이용해 MonoBehaviour (유니티 엔진 컴포넌트) 상의 데이터를 정의하고 Baker 함수를 통해 ECS 데이터로 변환합니다.
Entity System 정의 • [BurstCompile] 옵션을 통한 최적화
해당 옵션은 CPU 연산 능력을 크게 끌어 올려줍니다.
• Entity의 이동 및 파괴 구현 : IJob - Execute() 함수
IJob 인터페이스를 이용해 스레드 단위에서 처리할 객체의 실제 동작을 정의합니다.
ECB(Entity Command Buffer)를 통해 실행 이전에 해당 Entity가 언제 파괴될지 예약합니다. (멀티 스레드가 동작하는 Job 내부에서 Entity를 생성/파괴하는 것은 금지되어 있습니다. ECB를 통해 안전하게 동작하도록 처리합니다.)
• System class
IJob의 Excute 함수에 정의된 동작을 스케줄러에 병렬 스레드로 등록합니다.
이때 필요하다면
같은 로직을 MonoBehaviour로도 구현 • 의도
같은 하드웨어 환경에서 MonoBehaviour의 퍼포먼스를 ECS의 퍼포먼스와 직접 비교하기 위함입니다.
MonoBehaviour의 경우, stack 기반의 오브젝트 풀링을 통해 최적화 했습니다. 오브젝트의 수가 만 단위를 넘어가기 떄문에 stack을 통한 지역성 및 캐시 적중률의 이점이 조금이라도 있을 것이라고 생각했습니다.
MonoBehaviour 기반의 구현 과정은 생략하겠습니다.

트러블 슈팅 및 자가 피드백

의의

직접 코드를 읽고 작성하는 과정에서 손에 ECS 기반의 코드를 작성하는 감각을 익혔습니다. 또한, 직접 작성하며 놓친 부분과 오류가 발생하는 이유에 대해 파고 들면서 데이터 지향에 대해 이해하고 Unity ECS의 low level 동작에 대해서도 배울 수 있었습니다.

직접 기존 Mono와 ECS의 성능을 극단적인 조건에서 비교하는 과정에서 Mono 기반으로 구현한 씬에서 오브젝트 락이 발생하는 것을 확인했고, 최적화 측면에서 데이터 지향 프로그래밍의 필요성을 체감했습니다. 무엇보다 엔티티 숫자에 대한 걱정 없이 표현의 자유가 생긴다는 점에서 유저에게 새로운 즐거움을 줄 수 있을 것 같아 더 의미 있다고 느꼈습니다.

참고 자료

[ECS/DOTS #1] Unity ECS - Entity Component System 베이직 튜토리얼 [Best Tips & Tricks by Unity Japan]

시연 영상

https://youtu.be/lWLtYZOJ0q8