Ich habe mich schon seit einiger Zeit für das komponentenbasierte Entity-System interessiert und unzählige Artikel darüber gelesen (Die Insomiac-Spiele , der hübsche Standard Evolve Your Hierarchy , die T-Machine , Chronoclast ... um nur einige zu nennen).
Sie scheinen alle eine Struktur von außen zu haben, die etwa so aussieht:
Entity e = Entity.Create();
e.AddComponent(RenderComponent, ...);
//do lots of stuff
e.GetComponent<PositionComponent>(...).SetPos(4, 5, 6);
Und wenn Sie die Idee der gemeinsamen Nutzung von Daten einbringen (dies ist das beste Design, das ich bisher gesehen habe, um Daten nicht überall zu duplizieren).
e.GetProperty<string>("Name").Value = "blah";
Ja, das ist sehr effizient. Es ist jedoch nicht gerade am einfachsten zu lesen oder zu schreiben. es fühlt sich sehr klobig an und arbeitet gegen dich.
Ich persönlich würde gerne etwas machen wie:
e.SetPosition(4, 5, 6);
e.Name = "Blah";
Natürlich ist der einzige Weg, zu dieser Art von Design zu gelangen, zurück in der Entität-> NPC-> Feind-> Fliegender Feind-> Fliegender Feind mit einer Art Hierarchie, die dieses Design zu vermeiden versucht.
Hat jemand ein Design für diese Art von Komponentensystem gesehen, das immer noch flexibel ist und dennoch ein hohes Maß an Benutzerfreundlichkeit bietet? Und was das angeht, schafft man es, die (wahrscheinlich schwierigste) Datenspeicherung auf eine gute Art und Weise zu umgehen?
Welche Designs gibt es für ein komponentenbasiertes Entitätssystem, das benutzerfreundlich und dennoch flexibel ist?