Ich versuche, mich mit den Möglichkeiten zu beschäftigen, wie ich mit Kollisionen in einem Spiel um Komponenten richtig umgehen kann.
Ich sehe, dass viele Beispiele PhysicsComponent
in die Liste der Entitäten aufgenommen wurden, aber die tatsächliche Implementierung verwirrt mich.
Damit dies funktioniert, PhysicsComponent
müssten sie Zugang zur Welt um sie herum haben. Das ergibt für mich keinen intuitiven Sinn. Sollte eine Komponente nicht nur ihren Container (die Entität), sondern auch den Container ihres Containers (die Welt) nicht kennen?
Für mich klingt es so, als ob das Level oder die Szene eine Liste dieser Entitäten führen sollte und jedes Spielupdate die Entitäten durchlaufen sollte, um festzustellen, welche kollidieren.
Meine Frage ist erstens, ob dies ein gutes Design ist oder nicht, und zweitens, wie zu bestimmen ist, welche Entitäten kollidieren können. Ich nehme an, feste Entitäten könnten eine leere IRigidBody-Schnittstelle implementieren, damit die Ebene bestimmen kann, welche Entitäten in der Liste eine Kollision unterstützen. Aber bricht dies das Komponentendesign?
Sollten sie stattdessen eine leere RigidBody-Komponente enthalten? Dies ist möglicherweise sogar besser, da es möglicherweise nicht immer leer ist und dieser Ansatz zukunftssicherer ist. Das einzige Problem dabei ist die Komplexität. Die Szene müsste nicht nur jede Entität, sondern auch die Komponenten jeder Entität durchlaufen, um festzustellen, ob diese RigidBody-Komponente vorhanden ist.
Drittens sollten beide Entitäten, wenn sie kollidieren, auf irgendeine Weise informiert werden, und ich bin mir nicht sicher, wie dies erreicht werden kann.
Nehmen wir an, dass beide Entitäten eine HealthComponent enthielten und wenn sie kollidierten, ihre Integrität um einen willkürlichen Wert abnahm.
Aber ist dann die Szene für zu viel verantwortlich? Ich könnte sehen, dass dies möglicherweise außer Kontrolle gerät und unhandlich wird, wenn die Szene für viele Dinge verantwortlich ist, zu denen Entitäten keinen (?) Zugang haben sollten.
Bearbeiten: Frage mit mehr Details aktualisiert.