By inheritance, I assume you're referring to a traditional monolithic object oriented approach to game development. Monolithic inheritance produces messy heap allocations that are difficult to optimize, and the side effects of different objects' functionality may cause race conditions when trying to introduce parallelism into the engine. Most of these drawbacks are those of classic monolithic OOP software architectures in general, which I'm happy to provide a refresher on if you need one.

ECS is a data-oriented approach where Entities are generally pointers to a bunch of data Components, often stored in simple efficiently allocated collections of each individual type. An ECS System is designed to operate over collections of Entities which contain the Components relevant for the System's functionality. An monolithic game object with functionality "does" something to itself and other objects, while an Entity is a bunch of data Components which are operated on by different Systems.

ECS requires a strong attitude adjustment away from the intuitive tendency in OOP to perform implicit world modelling when designing the hierarchy and functionality of your game objects, but following the principle of data-oriented design gets you closer to the real engineering problem of game development: "The purpose of all programs, and all parts of those programs, is to transform data from one form to another... Solve for transforming the data you have given the constraints of the platform (and nothing else)"  — (Mike Acton, Insomniac Games/Unity Technologies) 

When you adopt the data-oriented mindset, it becomes much easier to reason about what your data is, how you're transforming it over time, and what kind of optimizations you can make given what you can guarantee ahead of time. It allows you to make low-level optimizations to underlying data structures late into development that may be impossible to implement given a game engine that runs on a monolithic OOP design whose dependencies, allocations, nested structures and access patterns in memory are difficult to formally reason about ahead of time.

It can be difficult to wrap your head around ECS compared to monolithic inheritance, and the cognitive overhead might not be worth it if you're working on a small project that doesn't need AAA-equivalent large-scale world simulation performance. But it would be very hard to meet that level of performance demand without a data-oriented game engine design.
จากการสืบทอด ฉันคิดว่าคุณกำลังหมายถึงแนวทางการพัฒนาเกมที่มุ่งเน้นวัตถุเสาหินแบบดั้งเดิม การสืบทอดแบบเสาหินทำให้เกิดการจัดสรรฮีปที่ยุ่งเหยิงซึ่งยากต่อการปรับให้เหมาะสม และผลข้างเคียงของการทำงานของออบเจ็กต์ที่แตกต่างกันอาจทำให้เกิดสภาวะการแข่งขันเมื่อพยายามแนะนำความขนานในกลไก ข้อเสียส่วนใหญ่เหล่านี้คือสถาปัตยกรรมซอฟต์แวร์ OOP แบบเสาหินคลาสสิกโดยทั่วไป ซึ่งฉันยินดีที่จะให้ข้อมูลทบทวนหากคุณต้องการ ECS เป็นแนวทางที่มุ่งเน้นข้อมูล โดยโดยทั่วไปเอนทิตีจะชี้ไปยังส่วนประกอบข้อมูลจำนวนมาก ซึ่งมักจะจัดเก็บไว้ในคอลเล็กชันแต่ละประเภทที่ได้รับการจัดสรรอย่างมีประสิทธิภาพอย่างเรียบง่าย ระบบ ECS ได้รับการออกแบบมาเพื่อดำเนินการกับคอลเลกชันของเอนทิตีซึ่งมีส่วนประกอบที่เกี่ยวข้องกับการทำงานของระบบ ออบเจ็กต์เกมขนาดใหญ่ที่มีฟังก์ชันการทำงาน "ทำ" บางสิ่งบางอย่างกับตัวเองและออบเจ็กต์อื่นๆ ในขณะที่เอนทิตีคือกลุ่มของส่วนประกอบข้อมูลซึ่งดำเนินการโดยระบบที่แตกต่างกัน ECS ต้องการการปรับทัศนคติที่เข้มแข็งให้ห่างจากแนวโน้มตามสัญชาตญาณใน OOP เพื่อทำการสร้างแบบจำลองโลกโดยนัยเมื่อออกแบบลำดับชั้นและฟังก์ชันการทำงานของวัตถุในเกมของคุณ แต่การปฏิบัติตามหลักการออกแบบที่มุ่งเน้นข้อมูลจะทำให้คุณเข้าใกล้ปัญหาทางวิศวกรรมที่แท้จริงของการพัฒนาเกมมากขึ้น: "วัตถุประสงค์ของโปรแกรมทั้งหมด และทุกส่วนของโปรแกรมเหล่านั้น คือการแปลงข้อมูลจากรูปแบบหนึ่งไปยังอีกรูปแบบหนึ่ง... แก้ปัญหาในการแปลงข้อมูลที่คุณได้รับจากข้อจำกัดของแพลตฟอร์ม (และไม่มีอะไรอื่นใด)" - (Mike Acton, เกมนอนไม่หลับ/เทคโนโลยีเอกภาพ) เมื่อคุณใช้กรอบความคิดที่มุ่งเน้นข้อมูล คุณจะง่ายขึ้นมากในการให้เหตุผลว่าข้อมูลของคุณคืออะไร คุณจะเปลี่ยนแปลงข้อมูลอย่างไรเมื่อเวลาผ่านไป และประเภทใดที่คุณสามารถทำได้โดยคำนึงถึงสิ่งที่คุณรับประกันได้ล่วงหน้า ของเวลา ช่วยให้คุณสามารถทำการเพิ่มประสิทธิภาพระดับต่ำให้กับโครงสร้างข้อมูลพื้นฐานในช่วงท้ายของการพัฒนาซึ่งอาจเป็นไปไม่ได้ที่จะนำไปใช้ เนื่องจากกลไกเกมที่ทำงานบนการออกแบบ OOP แบบเสาหิน ซึ่งการขึ้นต่อกัน การจัดสรร โครงสร้างที่ซ้อนกัน และรูปแบบการเข้าถึงในหน่วยความจำเป็นเรื่องยากที่จะให้เหตุผลอย่างเป็นทางการ เกี่ยวกับก่อนเวลา การพิจารณา ECS อาจเป็นเรื่องยากเมื่อเทียบกับการสืบทอดแบบเสาหิน และค่าใช้จ่ายด้านการรับรู้อาจไม่คุ้มค่า หากคุณกำลังทำงานในโครงการขนาดเล็กที่ไม่ต้องการประสิทธิภาพการจำลองโลกขนาดใหญ่เทียบเท่า AAA แต่มันคงเป็นเรื่องยากมากที่จะตอบสนองความต้องการด้านประสิทธิภาพในระดับนั้นหากไม่มีการออกแบบเอ็นจิ้นเกมที่เน้นข้อมูล
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence