ฉันได้รับความสนใจในระบบเอนทิตีที่อิงองค์ประกอบอยู่พักหนึ่งแล้วอ่านบทความที่นับไม่ถ้วนในเกม (เกม InsomiacมาตรฐานEvolve Your Hierarchy , T-Machine , Chronoclast ... เพื่อชื่อไม่กี่คน)
พวกเขาดูเหมือนจะมีโครงสร้างด้านนอกของสิ่งที่ชอบ:
Entity e = Entity.Create();
e.AddComponent(RenderComponent, ...);
//do lots of stuff
e.GetComponent<PositionComponent>(...).SetPos(4, 5, 6);
และถ้าคุณนำความคิดของข้อมูลที่ใช้ร่วมกัน (นี่คือการออกแบบที่ดีที่สุดที่ฉันเคยเห็นมาในแง่ของการไม่ทำซ้ำข้อมูลทุกที่)
e.GetProperty<string>("Name").Value = "blah";
ใช่มันมีประสิทธิภาพมาก อย่างไรก็ตามการอ่านหรือเขียนนั้นไม่ใช่วิธีที่ง่ายที่สุด มันรู้สึกว่าเป็น clunky และทำงานกับคุณ
โดยส่วนตัวฉันต้องการทำสิ่งที่ชอบ:
e.SetPosition(4, 5, 6);
e.Name = "Blah";
แม้ว่าแน่นอนว่าหนทางเดียวที่จะได้รับการออกแบบนั้นกลับมาอยู่ในเอนทิตี -> NPC-> ศัตรู -> FlyingEnemy-> FlyingEnemy- ด้วย FlyingAnemy ด้วยลำดับขั้นแบบที่การออกแบบนี้พยายามหลีกเลี่ยง
มีใครเคยเห็นการออกแบบสำหรับระบบส่วนประกอบชนิดนี้ซึ่งยังคงความยืดหยุ่น แต่ยังคงความเป็นมิตรกับผู้ใช้อยู่ในระดับ? และสำหรับเรื่องนั้นจัดการที่จะหลีกเลี่ยงการจัดเก็บข้อมูล (อาจเป็นปัญหาที่ยากที่สุด) ในทางที่ดี?
มีการออกแบบอะไรบ้างสำหรับระบบเอนทิตีที่อิงส่วนประกอบที่ใช้งานง่าย แต่ยังยืดหยุ่นได้