Systems(系统)
一个系统,即ECS中的S,提供了将组件数据从当前状态转换到下一个状态的逻辑–例如,一个系统可能会用所有移动实体的速度乘以自上次更新以来的时间间隔来更新它们的位置。
Instantiating systems(实例化系统)
Unity ECS在你的项目中自动发现系统类,并在运行时将它们实例化。它将每个发现的系统添加到一个默认的系统组中。你可以使用系统属性来指定一个系统的父组和该系统在组内的顺序。如果你没有指定一个父组,Unity会以一个确定的但未指定的顺序将系统添加到默认世界的模拟系统组中。你也可以使用一个属性来禁止自动创建。
一个系统的更新循环是由其父级的ComponentSystemGroup驱动的。组件系统组本身就是一种专门的系统,负责更新其子系统。组可以是嵌套的。系统的时间数据来自其运行的世界;时间由UpdateWorldTimeSystem更新。
你可以使用Entity Debugger窗口(菜单:Window > Analysis > Entity Debugger)查看系统配置。
System types(系统类型)
Unity ECS提供了几种类型的系统。一般来说,你为实现游戏行为和数据转换而编写的系统将扩展SystemBase。其他系统类有专门的用途。你通常使用EntityCommandBufferSystem和ComponentSystemGroup类的现有实例。
-
SystemBase – 创建系统时要实现的基类。
-
EntityCommandBufferSystem – 为其他系统提供EntityCommandBuffer实例。每个默认的系统组都在其子系统列表的开头和结尾维护一个实体命令缓冲系统。这允许你对结构变化进行分组,以便它们在一个框架中产生较少的同步点。
-
ComponentSystemGroup --为其他系统提供嵌套组织和更新顺序。Unity ECS默认会创建几个组件系统组。
-
GameObjectConversionSystem – 将基于GameObject的、编辑器内的游戏表示转换为高效的、基于实体的、运行时的表示。游戏转换系统在Unity编辑器中运行。
重要提示:ComponentSystem 和 JobComponentSystem 类以及 IJobForEach 正在逐步退出 DOTS API,但还没有正式废弃。请使用SystemBase和Entities.ForEach代替。