Ho lavorato su alcuni progetti di hobby negli ultimi 3-4 anni. Solo semplici giochi 2D e 3D. Ma ultimamente ho iniziato un progetto più grande. Negli ultimi due mesi ho cercato di progettare una classe di oggetti di gioco che può essere la base di tutti i miei oggetti di gioco. Quindi, dopo molti tentativi, sono passato a Google che mi ha rapidamente indirizzato ad alcuni PDF e PowerPoint di GDC. E ora sto cercando di afferrare gli oggetti di gioco basati su componenti.
Capisco che il motore crea un oggetto di gioco e quindi attacca diversi componenti che gestiscono cose come la salute, la fisica, la rete e qualsiasi cosa tu li faccia fare. Ma quello che non capisco è come il componente X sappia se Y ha cambiato lo stato dell'oggetto. Come fa il PhysicsComponent a sapere se il giocatore è vivo, perché la salute è controllata dal HealthComponent ..? E in che modo HealthComponent interpreta "l'animazione del giocatore morto"?
Avevo l'impressione che fosse qualcosa del genere (in HealthComponent):
if(Health < 0) {
AnimationComponent.PlayAnimation("played-died-animation")
}
Ma poi, come fa HealthComponent a sapere che l'oggetto di gioco a cui è collegato ha un componente AnimationComponent collegato? L'unica soluzione che vedo qui è
Verifica se un componente Animation è collegato o meno (all'interno del codice componente o sul lato motore)
I componenti richiedono altri componenti, ma ciò sembra contrastare l'intero progetto dei componenti.
Scrivi come, HealthWithAnimationComponent, HealthNoAnimationComponent e così via, che sembra combattere ancora l'intera idea di progettazione dei componenti.