资料:
- 官方文档资料地址:https://docs.unity3d.com/Packages/com.unity.entities@0.2/api/Unity.Profiling.html
- B站Unity官方,宣雨松大大讲解DOTS:https://www.bilibili.com/video/BV18J411t7G8?t=2267
- Unity官方ECS案例源码:https://github.com/Unity-Technologies/EntityComponentSystemSamples
- Unity官方Job系统案例源码:https://github.com/stella3d/job-system-cookbook
什么是ECS?
ECS即Entity-Component-System(实体-组件-系统)的缩写,遵循组合优于继承原则,游戏内的每一个基本单元都是一个Entity,每一个Entity又由一个或多个Component构成,每个Component仅仅包含代表其特性的数据,没有方法。System是来处理拥有一个或多个相同Component的Entity集合的工具,只拥有行为。
ECS的特点
比GameObject/MonoBehaviour更容易处理大量物体。面向数据设计,很容易并行高速处理,与Unity开发的C# JobSystem,Burst Compiler一起工作,从而获取更高的项目运行性能,增强了解耦性,可测性,扩展性
ECS发展历史
- 在Unity2018引入Entities之前,ECS框架就已经出现,但还是因为守望先锋采用ECS框架才被我们熟知。后来Git上出现了一个Entitas的插件可以直接用在Unity上。Entitas-Unity是Unity的一个ECS框架,在github上面开源项目。
- 经过Unity公司认可改造,目前Unity2018.x版本已经通过“Package Manager“提供了Unity版本的ECS插件,名称为“Entities”
- Unity2019.x版本,对“Entities”插件的API进行了改造与完善,以更规范的API实现更加规范与高效的编程模式
Unity使用ECS需要安装三个插件
- Entities
- Hybrid Renderer
- Mathematics
- Unity.Mathematics提供了矢量类型(float4,float3),它可以直接映射到硬件SIMD寄存器
- Unity.Mathematics的Math类中也提供了直接映射到硬件SIMD寄存器
- 这样原本CPU需要一个一个计算的,有了SIMD可以一次性计算完
- Unity之前的Math类默认不支持映射SIMD寄存器
Unity ECS分为PureECS和HyBridECS