En concevant un système entité-composant pour mon moteur, je suis tombé sur un petit problème dans la manière de stocker et de récupérer un type particulier de composant.
Tout d'abord, permettez-moi de clarifier un peu la terminologie que je vais utiliser dans cette question:
- J'appelle " Component " une structure de données qui stocke les données pertinentes pour un système particulier.
- J'appelle « système » une agrégation de méthodes et de structures de données qui utilise des composants pour mettre à jour l'état du jeu / l'interface avec l'utilisateur.
- Une " Entité " est simplement un ID utilisé pour récupérer des composants spécifiques et modifier leurs données dans la logique du jeu.
Chaque système possède un tableau (mappé par ID) de son type de composant (par exemple, Physique-> Composant physique, AI-> AIComponent, Rendu -> RenderingComponent), afin de pouvoir itérer efficacement sur les données.
Cependant, tous les composants n'appartiennent pas spécifiquement à un système. Par exemple, un composant Transform stocke la position, la rotation et l'échelle d'un objet. C'est l'une des parties les plus importantes d'une entité (Unity la rend obligatoire, même), car elle est utilisée par de nombreux systèmes, par exemple la physique, l'IA, le rendu, etc.
C'est à peu près le problème auquel je suis confronté. Étant donné que Transform est utilisé par de nombreux autres systèmes, comment dois-je procéder pour en récupérer un à utiliser pour chaque composant? Une solution possible que je vois est de faire en sorte que chaque composant stocke son propre ID d'entité. Il serait facile de récupérer n'importe quel composant comme celui-ci, mais ce ne serait pas aussi efficace, et cela irait également à l'encontre du concept d'un composant comme un ensemble de données isolé et indépendant, qui n'en connaît aucun autre.
Existe-t-il un moyen approprié de résoudre ce problème? Transformer devrait-il même être un composant?