몇 가지 게임 디자인 패턴을 살펴본 후, 나는 게임 엔진을 위해 Entity-Component-System (ES 시스템)으로 정착했습니다. 기사 (주로 T = Machine )를 읽고 일부 소스 코드를 검토 한 후 시작하기에 충분하다고 생각합니다.
내가 고투하고있는 기본 아이디어는 하나뿐입니다. 서로 의존하는 엔터티 그룹을 어떻게 처리합니까?
예를 들어 보겠습니다.
표준 오버 헤드 슈터 ( Jamestown 이라고 생각 )를 만들고 있고 여러 개의 별개이지만 연결된 부품으로 "보스 엔티티"를 만들고 싶다고 가정합니다. 분류는 다음과 같습니다.
- 선체 : 운동, 렌더링
- 대포 : 위치 (선체에 대해 고정됨), 영웅에서 추적 \ 화재, 비활성화 될 때까지 데미지
- 코어 : 위치 (선체를 기준으로 잠김), 영웅 추적 / 화재, 비활성화 될 때까지 피해 받기, 선박 그룹의 다른 모든 엔티티 비활성화 ((파괴))
내 목표는 새로운 집계 요소를 만들 때마다 하위 시스템을 다시 작성하지 않고도 별도의 게임 요소로 식별되고 조작되는 것입니다.
ES System에서 이러한 종류의 디자인을 어떻게 구현합니까?
- 어떤 종류의 부모-자식 엔터티 관계 (엔터티에 자식이있을 수 있음)를 구현합니까? 이것은 엔티티가 단지 빈 컨테이너이고 더 OOP를 느끼게 만드는 방법론과 모순되는 것 같습니다.
- 일종의 연결 컴포넌트 (BossComponent) 및 관련 시스템 (BossSubSystem)을 사용하여 별도의 엔티티로 구현합니까? 나는 도울 수는 없지만 구성 요소가 통신하는 방식이 큰 곰 함정 인 것처럼 보이기 때문에 이것이 구현하기가 어렵다고 생각합니다.
- 구성 요소 컬렉션 (ShipComponent, CannonComponents, CoreComponent)을 사용하여 하나의 엔터티로 구현합니까? 이것은 ES 시스템 의도를 능가하는 것으로 보입니다 (여기의 구성 요소는 너무 무거운 엔티티와 너무 비슷해 보입니다). 나는 이것을 알고 있으므로 거기에 넣을 것이라고 생각했습니다.
- 내가 언급 한 다른 것으로 구현합니까?
나는 이것이 OOP에서 매우 쉽게 구현 될 수 있다는 것을 알고 있지만 OOP 대신 ES를 선택하는 것이 내가 고수 할 것입니다. 이 디자인을 구현하기 위해 순수한 ES 이론을 깨야한다면 (이전에 순수한 디자인을 타협하지 않았을 것 같지는 않지만), 나쁜 디자인으로 시작하기보다는 성능상의 이유로 그렇게하는 것을 선호합니다.
추가적인 신용을 얻으려면 동일한 디자인을 생각하지만 각 "보스 엔티티"는 실제로 본체, 메인 코어 및 3 개의 "보스 엔티티"로 구성된 더 큰 "빅 보스 엔티티"에 연결되었습니다. 이것은 적어도 3 차원 (조부모-자녀)에 대한 해결책을 볼 수있게 해 줄 것입니다 ...