내 질문은 :
게임 상태 객체 스택을 유지하지 않고 엔티티 시스템에서 게임 상태를 어떻게 처리 할 수 있습니까?
따라서 엔터티 시스템의 디자인은 엔터티가 입력 이벤트에 등록해야 할 때 입력 구성 요소가 입력 시스템을 호출하고 "이 엔터티에이 엔터티를 등록합니다"라는 의미입니다. 이것은 모두 훌륭하지만, 게임 상태 개념 (일시 정지 화면)을 추가하면 엔티티가 현재 상태에 있고 입력을 받아야하는 경우 문제가됩니다.
"이 게임 상태에있는 동안이 입력에이 엔티티를 등록하십시오"라고 입력 컴포넌트 / 시스템을 확장 할 수 있지만, 모든 엔티티가 어떤 상태에서 사용 될지 알고 있어야하며 이는 명확하지 않을 수 있습니다. 또한 등록 된 입력 (및 콜백을 사용하는 다른 시스템)별로 게임 상태 목록을 유지하는 것이 너무 효율적이지 않습니다.
내가 가진 또 다른 아이디어는 게임 상태를 나타내는 엔터티가 있기 때문에 비활성화 된 것으로 표시 한 다음 입력 이벤트를 생성 할 때 엔터티가 비활성화 된 게임 상태 엔터티의 자손이 아닌지 확인합니다. 모든 콜백에 대해 부모를 해결하는 데 비용이 많이 드는 것 같습니다.
또 다른 아이디어는 모든 시스템이 현재 상태를 기준으로 데이터를 저장하도록하는 것입니다. 입력을 생성 할 때 대상 엔터티도 후보가되지 않습니다. 그러나 이것은 다른 상태의 엔티티 간 통신을 허용하는 기능을 실제로 손상시킵니다 (일시 중지 화면의 문제는 아니지만 Oblivion / Skyrim에서 잠금 선택을 생각하십시오).
내가 가진 유일한 다른 아이디어는 모든 구성 요소가 상태 변경 이벤트를 처리하고 관련 시스템과 통신하여 등록 된 모든 것을 비활성화 하고이 상태로 다시 전환 할 때 다시 활성화하는 것입니다.
두 번째 (객체를 비활성화 된 것으로 표시)와 앞뒤 (각 구성 요소가 상태 변경을 처리하게 함)는 내 아이디어 중 가장 좋은 것처럼 보이지만 그중 어느 것도 나에게 특히 뛰어나지는 않습니다.
다른 사람이 이것을하는 방법에 대한 다른 아이디어가 있습니까?
편집 이 질문에서 구체적으로 입력에 대해 이야기하는 동안 충돌, 타이머 이벤트 등과 같은 엔티티에 메시지 / 이벤트를 보낼 수있는 모든 시스템을 의미 할 수 있습니다 ...