현재 다음 문제에 직면하고 있습니다.
엔터티 구성 요소 시스템 (ECS) 을 사용하여 퐁 클론을 작성하려고합니다 . 나는 스스로 "프레임 워크"를 썼습니다. 따라서 모든 구성 요소로 엔티티를 관리하는 클래스가 있습니다. 그런 다음 구성 요소 클래스 자체가 있습니다. 마지막으로 시스템에 필요한 구성 요소가있는 모든 엔티티를 얻는 시스템이 있습니다.
예를 들어 내 이동 시스템은 위치 구성 요소와 이동 구성 요소가있는 모든 엔티티를 찾습니다. 위치 구성 요소는 위치를 유지하고 이동 구성 요소는 속도를 유지합니다.
그러나 실제 문제는 내 충돌 시스템입니다. 이 클래스는 논리적 얼룩과 같습니다. 이 수업에는 특별한 경우가 많이 있습니다.
예를 들어 : 내 패들이 테두리와 충돌 할 수 있습니다. 이 경우 속도가 0으로 설정됩니다. 내 공은 테두리와 충돌 할 수 있습니다. 그러나이 경우 속도는 경계의 법선에서 미러링되므로 반영됩니다. 이것을하기 위해 공에 여분의 물리 성분을주었습니다. "이건 멈추지 않고 반영합니다." 실제로 물리 구성 요소에는 실제 데이터가 없습니다. 객체가 반영되거나 중지되는지를 시스템에 알리기 위해 빈 클래스입니다.
공이 패 들이나 경계와 충돌 할 때 입자를 렌더링하고 싶습니다. 공은 충돌시 파티클을 생성하도록 충돌 시스템에 지시하는 다른 구성 요소를 가져와야한다고 생각합니다.
그런 다음 패들과 충돌 할 수 있지만 국경과는 충돌 할 수있는 파워 업을 원합니다. 이 경우 파워 업이 사라져야합니다. 따라서 더 많은 케이스와 구성 요소가 필요합니다 (일부 엔티티가 특정 엔티티와 충돌 할 수 있음을 시스템에 알리려면 일부는 실제로 충돌 할 수는 있지만 충돌 시스템은 파워 업을 적용해야했습니다) 패들 등 등).
엔터티 구성 요소 시스템은 유연하고 상속에 문제가 없기 때문에 좋은 것입니다. 그러나 나는 현재 완전히 붙어 있습니다.
너무 복잡하다고 생각합니까? 이 문제에 어떻게 대처해야합니까?
물론, 실제로 "포스트 콜리 전"을 담당하는 시스템을 만들어야하므로 콜리 전 시스템은 "예, 마지막 프레임에 충돌이 있습니다"라는 메시지 만 표시하고 "포스트 콜리 전"시스템이 많이 있습니다. 모두 서로 다른 (조합) 구성 요소가 필요하며 구성 요소를 변경하십시오. 예를 들어 충돌 후 충돌을 멈추는 동작을 중지시키는 이동 후 충돌 시스템이 있습니다. 그런 다음 사물 등을 반영하는 물리 사후 충돌 시스템
그러나 이것은 나에게 적절한 해결책이 아닌 것 같습니다.
- 내 충돌 사후 충돌 시스템에는 위치 구성 요소, 이동 구성 요소 및 충돌 구성 요소가있는 엔티티가 필요합니다. 그런 다음 엔터티의 속도를 0으로 설정합니다.
- 물리 후 충돌 시스템에는 위치 구성 요소, 이동 구성 요소, 충돌 구성 요소 및 물리 구성 요소가있는 엔티티가 필요합니다. 그런 다음 속도 벡터를 반영합니다.
문제는 명백합니다. 충돌 후 이동은 물리 후 충돌 시스템에서 엔티티의 하위 집합 인 엔티티가 필요합니다. 따라서 두 개의 충돌 후 시스템이 동일한 데이터에서 작동하며 그 결과는 다음과 같습니다. 엔티티에는 물리 구성 요소가 있지만 충돌 후 속도는 0입니다.
엔터티 구성 요소 시스템에서 이러한 문제는 일반적으로 어떻게 해결됩니까? 그 문제가 평소에도 있습니까 아니면 내가 잘못하고 있습니까? 그렇다면 무엇을 어떻게해야합니까?