Auf den ersten Blick scheint Entity-Component eine gute Möglichkeit zu sein, Spiele zu programmieren. Alles ist ein Spielobjekt und diese Spielobjekte bestehen aus Komponenten. Die Attraktion ist, dass Komponenten sehr flexibel sind und Sie sie lediglich einem Spielobjekt "hinzufügen" müssen, um dessen Funktionalität zu erben.
Ein gutes Beispiel könnte also eine Plattform sein, auf die der Charakter springen muss. Vielleicht hat dieses Ding einen Collider, eine sich bewegende Komponente, vielleicht eine rotierende Komponente oder vielleicht sogar eine starre "RotatingAndMovingPlatformComponent". Okay, das klingt großartig. Fügen Sie einfach alle diese Komponenten zum Spielobjekt hinzu und fertig, Sie haben diese zusätzliche Funktionalität. Ich finde jedoch, dass diese Komplexität dort endet, wo ihre Nützlichkeit endet.
Versuchen Sie dies mit Menüs, komplexen Charakterbewegungen mit mehreren Zuständen, abstrakten Ideen wie Spielmodi oder Spielzuständen, und Ihre Flexibilität und Modularität werden zerstört. Menüs beinhalten viele Besonderheiten, komplexe Zeichenbewegungen beinhalten oft viele Zustände, was bedeutet, dass entweder eine Kommunikation zwischen diesen Komponenten erforderlich ist oder dass eine Steuerungskomponente nur für diesen Charaktertyp erstellt werden muss. Darüber hinaus müssen sich einige Komponenten in irgendeiner Weise auf den Spielstatus verlassen.
Ich sehe sehr wenig Nutzen darin, auf diese Weise gegenüber gewöhnlicher Vererbung zu programmieren. Das Fehlen von Objektstrukturen zur Kompilierungszeit macht es sehr schwierig und unzuverlässig, viele Dinge zu tun.
Ich bin der Meinung, dass die beste und einfachste Vorgehensweise darin besteht, größere Komponenten mit mehr Abhängigkeiten zu verwenden. Ich sehe dies nicht als Problem (eher wie die Architektur von unreal 4), aber dann frage ich mich, wozu die Entity-Component-Architektur gut ist.