Entity Component System (ECS)를 활용하여 AI를 컨트롤 (일괄 처리)
일반 Behavior Tree, State Tree를 이용하는 것(개별 처리)보다 훨씬 성능이 우수
각 AI를 하나씩 처리하는게 아니라, 다 데이터(엔티티)로 보고 일괄 처리하여 많은 수의 AI를 컨트롤 가능
그래서 AI Controller도 사용 안 함
대규모 전쟁 시스템, 도시 시뮬레이션 등 AI 많을 때 사용하면 좋음

Mass Entity : 객체지향설계가 아니라 데이터 지향 설계를 가능하게 해주는 FrameWork
Mass Gameplay : 데이터 지향 설계에서 존재하는 단순한 데이터들의 덩어리들을 액터 시스템에 연결
Mass AI : State Tree랑 연결해주어, AI의 두뇌역할을 해주는 플러그인
Mass Crowd : 렌더링 알고리즘과 AI끼리 안 부딪히게 해주는 알고리즘 등이 들어있음

보행자도로, 차선처럼 경로/방향이 정해져있는 AI(Entity)가 다닐 수 있는 도로

Nav Mesh는 각 지점들이 연결되어 있는 네트워크의 일종
그래서 AI가 다음 지점으로 길찾기 알고리즘을 하게 되면, NavMesh는 전부 다 해야해서 엄청 오래 걸리고, Zone Graph는 그냥 방향따라 이동만 하면 되므로 엄청 가벼움
단점으로는, 방향따라서만 가고, NavMesh처럼 자유로운 움직임은 불가능
![]() | Details ![]() |
|---|

Lane Profiles : 이전에 생성한 Zone Shape는 정말 단순 도로 모양만 설치한 것.
Edit Profile 또는 Project Settings에서 Lane Profile로 다양한 도로를 생성
Lanes : 이 도로가 몇 차선인지를 설정. 각 차선마다 너비, 이동 방향, 어떤 태그를 가진 Entity가 사용 가능한지를 지정
이 세팅에서 Tag는 각 차선이 어떤 차선인지를 정하는 것.
Zone Shape의 Detail에 있는 Tags는 이 Zone Graph가 어떤 도로인지를 정하는 것.
즉, 태그를 가진 차선이 여러개가 있는 Zone graph의 Tag를 정하는 것.
같은 Zone Graph여도 마을에 있냐, 던전에 있냐 이런것처럼 도로 전체의 Tag를 설정


Alt키 누르고 이동 시, 도로 꺾임
도로 생성하고 Build 탭에서 Build ZoneGraph를 해주어야 도로로 인식함
Entity의 데이터들을 한 번에 설계도로 가지고, 이 설계도로 AI들을 계속 생성하는 방식이 Mass Entity(ECS) 방법
Entity의 설계도인 Data Asset을 생성
![]() | ![]() |
|---|
Traits : 엔티티들의 특성. 이걸로 엔티티의 모든 기능을 추가해줌
Fragments : 가장 작은 데이터 단위
Processor : Entity는 로직 없이, 데이터만 가짐. 이들을 거대한 프로세서가 감시하여 Traits만 보고 일괄처리하여 동작시킴


Agent Capsule Collision Sync
Sync Transform은 해제하여 충돌 크기만 동기화하고, 위치는 안 건들림Agent Movement Sync
Mass to Actor로 설정Agent Orientation Sync
Mass to Actor로 설정Crowd Member




Avoidance : 물체에 안 부딪히게 피하게 해주는 알고리즘 속성
Navigation Avoidance : 나 피하라고 알려주는 속성
Smooth Orientation : 부드럽게 방향 회전해줌
LODCollector : LOD 정보 수집해주게 함
![]() | ![]() |
|---|
프로세서가 명령을 내리면, 이 Mass Agent가 알아들어서 명령을 수행함
밑에 Trait는 이 캐릭터에만 더 특성추가해주고 싶을 때 사용
이제 만든 설계도로 엔티티들을 만들어 소환해줌
알아서 이쁘게 소환해주고 알아서 메모리 관리도 해줌
배치 없이 레벨에 있기만 하면 됨![]() | Details ![]() |
|---|
Count로 개수, Entity types로 소환할 Entity 설정
Proportion으로 확률에 따라 다른 설계도 사용도 가능
Spawn Data Generators : 어디에 소환할 건지
ZoneGraph~ : Zone Graph에서 스폰EQS~ : EQS 이용해 소환실행하면 사진처럼 LOD에 따라 다른 액터로 잘 소환됨

State Tree까지 연결해주어야 Entity가 행동이 가능해짐
Behavior Tree는 각자가 판단하고 동작하는 객체지향형 방식이라 ECS에서 못 씀
기존 Data Asset에 State Tree Trait를 추가하고, 새로 만들어줌
Mass Behavior로 선택![]() |
|---|
![]() ![]() |
|---|
ZG Find Wander Target으로 이동할 위치를 찾음. Tags 설정해주기
ZG Path Follow를 이용해 위치로 이동함. 윗 task에서 찾은 위치인 WanderTargetLocation으로 설정
Movement Style이 Isvalid면 Config 특성 따라가겠다는 뜻
AI들은 Mass로 일괄 처리되어 이동하기 때문에 Movement Component의 값이 정확하진 않게 됨
따라서 Movement Component에서 값 가져오는 애니메이션을 수정해야함

bShouldMove값을 정해줌Activation 단축키(')를 누르면 디버깅 가능
AI 밑의 동그라미는 충돌 감지 영역
각 화살표는 이동할 위치랑, AI의 forward vector
여러 단축키 눌러 원하는 정보 확인도 가능 (shift + n은 zone graph 경로)
현재 플레이어는 장애물로 인식 안 해서 회피하지 않음
플레이어용 Data Asset을 만들어 장애물로 인식해주면 됨
![]() ![]() |
|---|
AI와 반대로, 플레이어의 위치를 Mass에게 알려줘야하므로 Actor to Mass로 설정
그리고 플레이어에게 Mass Agent 컴포넌트 달고 데이터 에셋 추가하면 됨