ฉันเริ่มใช้ผู้เล่นและศัตรู AI ในเกม แต่ฉันสับสนเกี่ยวกับวิธีการนำสิ่งนี้ไปใช้ในสถาปัตยกรรมเกมตามส่วนประกอบได้ดีที่สุด
ว่าฉันมีตัวละครของผู้เล่นดังต่อไปนี้ที่สามารถนิ่งวิ่งและแกว่งดาบ ผู้เล่นสามารถผ่านไปยังสถานะดาบสวิงจากทั้งที่อยู่กับที่และนิ่ง แต่จากนั้นจะต้องสวิงให้เสร็จสิ้นก่อนที่ผู้เล่นจะสามารถกลับมายืนหรือวิ่งต่อได้ ในระหว่างการแกว่งผู้เล่นไม่สามารถเดินไปรอบ ๆ
อย่างที่ฉันเห็นฉันมีสองวิธีดำเนินการ:
- สร้างส่วนประกอบ AI เดียวที่มีลอจิกของผู้เล่นทั้งหมด (แยกออกจากองค์ประกอบจริงหรือฝังเป็น PlayerAIComponent) ฉันสามารถบังคับใช้ข้อ จำกัด ของรัฐได้อย่างง่ายดายโดยไม่ต้องสร้างการเชื่อมต่อระหว่างส่วนประกอบแต่ละอย่างที่ประกอบกันเป็นเอนทิตีของผู้เล่น อย่างไรก็ตามส่วนประกอบ AI ไม่สามารถแตกหักได้ ตัวอย่างเช่นถ้าฉันมีศัตรูที่สามารถยืนและเดินไปมาหรือเดินไปรอบ ๆ และแกว่งดาบเป็นครั้งคราวฉันต้องสร้างส่วนประกอบ AI ใหม่
- แยกพฤติกรรมออกเป็นส่วน ๆ โดยระบุแต่ละสถานะ ฉันได้รับ StandComponent, WalkComponent และ SwingComponent ในการบังคับใช้กฎการเปลี่ยนแปลงฉันต้องจับคู่แต่ละองค์ประกอบ SwingComponent ต้องปิดการใช้งาน StandComponent และ WalkComponent ในช่วงระยะเวลาของการสวิง เมื่อฉันมีศัตรูที่ยืนอยู่เฉยๆแกว่งดาบเป็นครั้งคราวฉันต้องแน่ใจว่า SwingComponent นั้นปิดการใช้งาน WalkComponent หากมีอยู่ แม้ว่าสิ่งนี้จะช่วยให้ส่วนประกอบผสมและการจับคู่ที่ดีขึ้น แต่ก็สามารถนำไปสู่ฝันร้ายในการบำรุงรักษาได้เมื่อมีการเพิ่มการพึ่งพาแต่ละครั้งส่วนประกอบที่มีอยู่จะต้องได้รับการอัปเดตเพื่อให้เล่นได้ดีขึ้นกับข้อกำหนดใหม่
สถานการณ์ในอุดมคติคือผู้ออกแบบสามารถสร้างศัตรู / ผู้เล่นใหม่ได้โดยการลากส่วนประกอบลงในคอนเทนเนอร์โดยไม่ต้องสัมผัสเครื่องยนต์หรือสคริปต์บรรทัดเดียว แม้ว่าฉันไม่แน่ใจว่าสามารถหลีกเลี่ยงการเข้ารหัสสคริปต์ได้ แต่ฉันต้องการให้ง่ายที่สุดเท่าที่จะทำได้
การสรุปทั้งหมด: ฉันควรลอจิก AI ทั้งหมดลงในคอมโพเนนต์เดียวหรือแยกสถานะลอจิกแต่ละส่วนออกเป็นส่วนประกอบแยกกันเพื่อสร้างชุดเอนทิตีที่ง่ายขึ้นหรือไม่
แก้ไข : ฉันสงสัยว่ามีความสับสนเกี่ยวกับสิ่งที่ฉันหมายถึงกับสถานการณ์ที่หนึ่งและสอง ฉันพยายามอธิบายในแผนภาพด้านล่าง
บันทึกความสัมพันธ์ระหว่างแต่ละรัฐและเอนทิตี ในสถานการณ์แรกส่วนประกอบ AI จะถูกสร้างไว้ล่วงหน้าก่อนที่จะถูกวางลงในเอนทิตี ผู้ออกแบบสามารถเลือกจากชุด AIComponents ที่มีให้โดยโปรแกรมเมอร์เท่านั้น สถานการณ์ที่สองมีสถานะต่างกันในระดับเดียวกับส่วนประกอบอื่น ๆ ตอนนี้ผู้ออกแบบสามารถสร้างเอนทิตีที่มี AI ที่ไม่ซ้ำใครโดยไม่รบกวนการทำงานของโปรแกรมเมอร์
คำถามคือสิ่งเหล่านี้เป็นเพียงสองตัวเลือกสำหรับการสร้าง AI ในเอนทิตีแบบอิงองค์ประกอบและถ้าเป็นเช่นนั้นอะไรจะให้ความยืดหยุ่นสูงสุด