ES로 더 재미있게 ...
현재 몇 가지 시스템이 있습니다.
- 렌더러 (렌더링 가능 속성, 변환 속성)
- 모션 (이동 가능 속성, 변형 속성, 렌더링 가능 속성 [경계 상자 등])
- 입력 (InputReceiver 속성)
- 기타
충돌 감지를 추가하고 있습니다. 저의 첫 생각은 충돌을 수행하는 새로운 시스템을 추가하는 것이 었습니다. 그것은에서 고립이 계속 나에게 의미가 Motion
모든 것들 때문에 그 움직임을 시스템 또는 충돌 감지에 참여할 필요는 애니메이션되는 - 등 카메라, 안개, -하지만 보인다 Collision
및 Motion
상호 의존적이다.
경우 Motion
엔티티는 변환 요구가 이동하여 검증하는 Collision
, 상기 이동 중 취소 또는 조정 (등 벽에서 정지 튀는).
대안은 충돌 객체 (kd-tree, octree 등)에 대한 참조를 유지하는 Collidable 속성을 만드는 것입니다. 서로 충돌 할 수있는 엔티티간에 공유됩니다. Motion
시스템은 그 특성에 대해 확인하고 확인하거나 움직임을 조정하는 데 사용할 수 있습니다.
코드 관점에서 볼 때 이는 수용 가능한 솔루션입니다. 그러나 ECS 아키텍처 관점 Motion
에서는 Movable
특성 이있는 모든 엔터티에 적용되지 않는 논리를 시스템에 적용하는 것 같습니다.
나는 또한의 움직임 벡터를 저장할 수 Movable
속성, 그리고이 Collider
시스템은 조정 Transform
필요하지만, 그 사이에 기능을 중복 포함됩니다 Motion
및 Collider
, 또는에서 콜백 Collider
에 Motion
바운스 / 반사 등의 충돌 위치와 표면 데이터에 대한 몇 가지 데이터 .
이것은 "특별 사례 해킹"이라는 제목에 속할 수 있지만 많은 양의 에지 케이스 코드를 만들지 않고이를 처리 한 사람들로부터 입력을 받고 싶습니다.
질문 서로에 대한 지식이 필요할 때 모션 시스템과 충돌 시스템 사이의 긴밀한 연결을 피하는 좋은 방법은 무엇입니까?