엔터티 구성 요소 시스템에 전역 컨텍스트 데이터를 어떻게 저장합니까?


10

내 질문은 이것입니다 :

어떻게 글로벌 컨텍스트 데이터를 저장하겠습니까? 엔터티 구성 요소 시스템의 월드 데이터 정보, 현재 월드 타임 등?

저는 C ++에서 Dwarf Fortress 스타일의 개방형 세계 시뮬레이션 게임을 구축하려고 노력하고 있습니다. 나는 재미를 위해 엔터티 구성 요소 스타일의 게임 엔진을 구축했으며 현재 내가 원하는 모든 기능에서 어떻게 작동하는지 알아 내려고 노력 중입니다. 표준 게임 플레이 (렌더링, 물리학, 개체 별 구성 요소 데이터 등) 외에도 모든 관련 시스템이 액세스 할 수있는 일부 글로벌 컨텍스트 데이터 (예 : 현재 연도와 같은 세계 데이터)를 갖고 싶습니다. , 지구 온난화가 일어나고 있는지 여부, 세상을 시뮬레이션하는 것과 관련된 모든 것). 원래는 "세계"구성 요소를 만들려고 생각했지만, 많은 다른 시스템이이 논리적 "전역"데이터에 액세스해야하는 경우에는 의미가없고 어려워 보입니다.

"세계"컴포넌트를 갖는 것이 이치에 맞습니까? 아니면이 데이터를 다른 방법으로 저장해야합니까?

또한이 데이터를 단순히 전역으로 만들어서 사용하려는 모든 시스템에 액세스 할 수있는 방법을 생각했습니다. 그것은 일반적으로 엔티티 구성 요소 원칙을 위반하는 것처럼 보이고 다른 이유로 지저분 할 수 있지만 실제로는 효과가 있다고 생각했습니다.

내가 생각한 또 다른 것은 실제로 관련 세계 컨텍스트 데이터를 시스템 자체에 직접 포함시키는 것입니다. 예를 들어, 구성 요소가 있거나없는 AgeSystem것을 가진 모든 엔티티를 "연령" getsWeakerAsTimePasses한 경우이 시스템은 시간 경과를 계산하는 데 사용할 멤버 데이터로 월드에 대한 관련 시간 데이터를 직접 저장할 수 있습니다. 이 세 번째 옵션은 내가 가장 좋아하는 것이었지만 브레인 스토밍에서 나에게 일어난 일이었습니다.

누구든지 조언 할 수 있습니까?


3
다운 보트에 대한 이론적 근거는 정중하고 OP뿐만 아니라 다른 사용자에게도 유용합니다.
MichaelHouse

2
당신은 망치를 만들었고 이제는 모든 것이 못처럼 보입니다. 나는 모든 것이 손톱이 아니기 때문에 프로그램에서 데이터를 보유하고 조작하는 데 ECS 이상을 사용할 수있는 권한을 부여합니다.
Patrick Hughes

답변:


10

작동하는 방법은 작동하는 방법입니다. 괜찮은 것처럼 들리지만 실제로 게임은 아키텍처보다 1000 배 더 중요합니다. 원하는 방식을 선택하고 사용하기 쉽습니다.

실제 배송 게임에서 본 것들 (ECS가 아닌 구성 요소 기반 디자인 사용; 많은 구성 요소 디자인에 ECS와 유사한 요소가 있지만 순수한 "ECS"를 본 적이 없습니다)는 다음과 같습니다.

  • 싱글 톤
  • 관련된 모든 다른 시스템에 대한 참조를 포함하는 컴포넌트 / 시스템으로 전달 된 "컨텍스트"오브젝트
  • 시스템 핸들을 개별 구성 요소로 전달하는 구성 요소 팩토리
  • 오브젝트 계층의 루트에 시스템에 대한 참조를 저장하는 컴포넌트 (일부 홀수 Unity 게임에서만)
  • 모든 다른 시스템에 대한 참조를 보유하는 시스템 또는 구성 요소에 전달 된 단일 "엔진"오브젝트
  • 문자열 기반 리소스 조회 시스템 (C ++ handle<PhysicsSystem> = GetResource<PhysicsSystem>("/systems/physics")에서 실제로, 그렇습니다.
  • 글로벌 데이터 및 C 스타일의 무료 기능으로 작동
  • 공백 / 하위 공간동반 비디오

그들은 모두 작동합니다. 나는 몇 가지 접근 방식과 분명한 선호 사항을 알고 있지만 모두 AAA 게임을 제공하는 데 사용되었습니다. 때때로 단일 프로젝트에서 여러 접근 방식 (40-100 명 이상의 엔지니어 팀이 우연히 중복 코드를 생성하는 경향이 있음).


2
나는 당신이 가장 좋아하는 것이 무엇인지 알고 싶습니다.
ashes999

내가 제공 한 링크는 내 슬라이드에 관한 것이며, 그것이 힌트라면 주제에 대해 이야기하는 비디오입니다. :)
Sean Middleditch

아, 그래서 당신이 가장 좋아하는 것은 공백 / 부분 공간 입니다. :)
ashes999

좋은 대답입니다. 나는 무언가 문제가 있다고 생각하고 실제로 "공간 / 서브 스페이스"개념을 게임 계획에 포함시켰다.
Awesomania
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.