问Unity专家:什么是ECS?

在本系列文章的第一篇中,我们将解释什么是Unity的ECS以及它可以为您的游戏做什么。 Unity ECS的主要优势是默认性能。 为了实现这一目标,ECS摆脱了传统的面向对象编程(即大多数Unity开发人员都熟悉的以GameObject和MonoBehaviour为中心的工作流程),转向了面向数据的设计。 为了说明它们之间的差异,让我们比较一下每种方法如何构建代表玩家角色的对象: 使用面向对象的编程,您将创建一个GameObject来表示玩家角色,然后附加MonoBehaviours以赋予GameObject功能,例如玩家控制器,健康状况和物理属性。 这些MonoBehaviours包含数据(例如生命值)和修改该数据的代码(例如,当玩家受到伤害时减少生命值)。 使用面向数据的设计,您将创建一个实体来表示玩家角色,然后附加组件以存储数据。 ECS组件不应与GameObject组件(例如MonoBehaviours)混淆。 与GameObject组件不同, ECS组件不包含任何逻辑,它们仅存储数据。 我们用于对实体及其组件执行操作的代码以系统的形式存在。 系统是脚本。 它们对世界上所有实体和组件都起着作用。 为了继续前面的减少生命值的示例,系统将对具有健康和损坏组件的所有实体进行分组,并相应地减少受影响的组件。 ECS有什么好处? 面向数据的设计的内存布局可确保ECS生成的代码在内存地址之间的跳转比传统的面向对象编程要少得多。 此外,由ECS引导的内存布局允许进一步利用缓存预取来优化代码,CPU使用此过程来确保在需要时已将下一个数据位加载到缓存中。…