ในการออกแบบระบบเอนทิตีส่วนประกอบสำหรับเครื่องยนต์ของฉันฉันเจออุปสรรคเล็กน้อยในการจัดเก็บและดึงส่วนประกอบบางประเภท
ก่อนอื่นให้ฉันตั้งคำศัพท์เล็กน้อยที่ฉันจะใช้ในคำถามนี้:
- ฉันเรียกว่า " ส่วนประกอบ " โครงสร้างข้อมูลที่เก็บข้อมูลที่เกี่ยวข้องสำหรับระบบเฉพาะ
- ฉันเรียกว่า " ระบบ " การรวมวิธีการและโครงสร้างข้อมูลที่ใช้ประโยชน์จากส่วนประกอบเพื่ออัปเดตสถานะเกม / อินเตอร์เฟสกับผู้ใช้
- " เอนทิตี " นั้นเป็นเพียง ID ที่ใช้เพื่อดึงส่วนประกอบเฉพาะและแก้ไขข้อมูลในตรรกะของเกม
แต่ละระบบมีอาร์เรย์ (ID-mapped) ของประเภทส่วนประกอบ (เช่น Physics-> PhysicsComponent, AI-> AIComponent, Rendering-> RenderingComponent) เพื่อให้สามารถทำซ้ำข้อมูลได้อย่างมีประสิทธิภาพ
อย่างไรก็ตามส่วนประกอบทั้งหมดไม่ได้เป็นของระบบโดยเฉพาะ ตัวอย่างเช่นองค์ประกอบการแปลงเก็บตำแหน่งการหมุนและขนาดของวัตถุ เป็นหนึ่งในส่วนที่สำคัญที่สุดของเอนทิตี (Unity ทำให้เป็นข้อบังคับ) แม้จะถูกใช้โดยระบบจำนวนมากเช่น Physics, AI, Rendering เป็นต้น
นี่เป็นปัญหาที่ฉันเผชิญอยู่มาก เนื่องจากระบบอื่น ๆ ใช้การแปลงเป็นจำนวนมากฉันจะต้องเรียกใช้เพื่อใช้สำหรับแต่ละคอมโพเนนต์อย่างไร ทางออกหนึ่งที่เป็นไปได้ที่ฉันเห็นคือการทำให้แต่ละ Component เก็บรหัสเอนทิตีของตัวเอง มันจะง่ายต่อการดึงองค์ประกอบใด ๆ เช่นนี้ แต่มันจะไม่ได้มีประสิทธิภาพและมันก็จะไปกับแนวคิดของ Component ที่เป็นกลุ่มของข้อมูลที่แยกและเป็นอิสระซึ่งไม่ได้รับรู้
มีวิธีที่เหมาะสมในการแก้ปัญหานี้หรือไม่? ควรเปลี่ยนเป็นองค์ประกอบหรือไม่?