什么是ECS + Job
单纯的ECS其实对性能提升并不大,那为什么Unity要推ECS,而且1年后铁定抛弃原来的Mono架构?(并不是完全抛弃,UI上任然会使用原来那一套)
因为ECS天生的多线程友好。搭配上Unity的JobSystem,轻松占满100%的Cpu,让cpu全速工作(在多核年代,占满CPU意味着牛逼)。如果到时候你还不会ECS+Job,只能干瞪眼。
好了,接下来要说明的是 ECS 是什么 以及为什么对多线程友好。
E C S 三个字母分别代表的是 Entity Component System
Entity 在ECS中他仅仅只是作为Component的容器
Component 你可以把他理解成一个 Struct
System 他拥有一个或多个Component集合 并且带有一个Update方法 每帧对Component里的数据进行操作
定义System时,需要给他注入一个符合规则的Entity集合。这个说法不准确,但好理解。因为,从直观上来说,System选择了这个世界上所有他想要操控的Entity,但其实真正注入的是Entity里装的Component。
例如这个世界上现在存在一个RotSystem,他需求这个世界上所有带Rotation组件(ECS自带),以及带有RotValue组件(自定义的组件,里面只有一个value值用来表示该实体的角速度常量)的Entity。
RotSystem在开始运行前, 会搜索这个世界上所有同时拥有Rotation和RotValue组件的Entity,并把他们的这两个组件注入到自己,进行操作。当用update进行每帧迭代的时候,就会遍历这个Entityÿ