หลังจากผ่านรูปแบบการออกแบบเกมมาสองสามครั้งฉันได้ตกลงกับ Entity-Component-System (ระบบ ES) สำหรับเอ็นจิ้นเกมของฉัน ฉันอ่านบทความ (ส่วนใหญ่เป็นT = Machine ) และตรวจสอบซอร์สโค้ดและฉันคิดว่าฉันเริ่มต้นได้เพียงพอแล้ว
มีเพียงแนวคิดพื้นฐานเดียวที่ฉันกำลังดิ้นรนอยู่ ฉันจะจัดการกับกลุ่มของเอนทิตีที่ต้องพึ่งพาซึ่งกันและกันได้อย่างไร
ให้ฉันใช้ตัวอย่าง:
สมมติว่าฉันสร้างปืนเหนือศีรษะแบบมาตรฐาน (คิดว่าเจมส์ทาวน์ ) และฉันต้องการสร้าง "หัวหน้าเอนทิตี" ที่มีหลายส่วนที่แตกต่างกัน แต่เชื่อมต่อกัน การพังทลายอาจมีลักษณะเช่นนี้:
- ตัวเรือ: การเคลื่อนไหว, การแสดงผล
- ปืนใหญ่: ตำแหน่ง (ล็อคโดยสัมพันธ์กับตัวเรือ), ติดตาม \ Fire ที่ฮีโร่, สร้างความเสียหายจนกว่าจะปิดการใช้งาน
- แกนหลัก: ตำแหน่ง (ล็อคโดยสัมพันธ์กับตัวเรือ), การติดตาม \ Fire ที่ฮีโร่, ทำความเสียหายจนกว่าจะปิดการใช้งาน, ปิดใช้งาน (เอ่อ ... ทำลาย) เอนทิตีอื่น ๆ ทั้งหมดในกลุ่มเรือ
เป้าหมายของฉันจะเป็นสิ่งที่จะระบุ (และจัดการ) เป็นองค์ประกอบเกมที่แตกต่างโดยไม่ต้องเขียนระบบย่อยใหม่ทุกครั้งที่ฉันต้องการสร้างองค์ประกอบรวมใหม่
ฉันจะใช้การออกแบบประเภทนี้ในระบบ ES ได้อย่างไร
- ฉันจะใช้ความสัมพันธ์เอนทิตีระหว่างพ่อแม่และลูกหรือไม่ (เอนทิตีสามารถมีลูกได้)? สิ่งนี้ดูเหมือนจะขัดแย้งกับวิธีการที่เอนทิตีเป็นเพียงภาชนะที่ว่างเปล่าและทำให้มันรู้สึกว่า OOP มากขึ้น
- ฉันจะใช้มันเป็นเอนทิตี้ที่แยกต่างหากด้วยการเชื่อมต่อ Component (BossComponent) และระบบที่เกี่ยวข้อง (BossSubSystem) หรือไม่? ฉันอดไม่ได้ที่จะคิดว่าสิ่งนี้จะเป็นเรื่องยากที่จะนำมาใช้เนื่องจากการสื่อสารของส่วนประกอบดูเหมือนจะเป็นกับดักหมีตัวใหญ่
- ฉันจะใช้มันเป็น Entity เดียวด้วยชุดของส่วนประกอบ (ShipComponent, CannonComponents, CoreComponent) หรือไม่ อันนี้ดูเหมือนจะเปลี่ยนทิศทางของความตั้งใจของระบบ ES (ส่วนประกอบที่นี่ดูเหมือนมากเกินไปเอนทิตีที่มีน้ำหนักมาก) แต่ฉันรู้เรื่องนี้ดังนั้นฉันจึงคิดว่าฉันจะเอามันออกไป
- ฉันจะใช้มันเป็นอย่างอื่นที่ฉันได้กล่าวถึงหรือไม่
ฉันรู้ว่าสิ่งนี้สามารถนำไปใช้งานได้อย่างง่ายดายใน OOP แต่การเลือก ES มากกว่า OOP เป็นสิ่งที่ฉันจะทำ ถ้าฉันต้องการทำลายด้วยทฤษฎี ES ที่บริสุทธิ์เพื่อใช้การออกแบบนี้ฉันจะ (ไม่เหมือนที่ฉันไม่เคยมีการออกแบบที่บริสุทธิ์มาก่อน) แต่ฉันต้องการทำเช่นนั้นเพื่อเหตุผลด้านประสิทธิภาพแทนที่จะเริ่มต้นด้วยการออกแบบที่ไม่ดี
สำหรับเครดิตพิเศษลองนึกถึงการออกแบบที่เหมือนกัน แต่ "เอนทิตีของเจ้านาย" แต่ละอันนั้นเชื่อมโยงกับ "บิ๊กเอนทิตี BigBoss" ที่ทำจากตัวหลัก, แกนหลักและ 3 "เอนทิตีบอส" นี่จะให้ฉันดูวิธีแก้ปัญหาอย่างน้อย 3 มิติ (ปู่ย่าตายาย - ลูก - ลูก) ... ซึ่งน่าจะเพียงพอสำหรับฉัน