浅谈ECS

 

使用Entitas开发了一段时间的个人游戏,结果又重构回来了,采用部分Entitas,部分面向对象的方式重新写了

这个游戏https://github.com/IceLanguage/Pokemon_Unity3D_Entitas

在这篇文章里我简单谈谈我对ECS的理解吧

什么是ECS

Entity Component System (ECS) 是一个 gameplay 层面的框架 ,将游戏对象抽象为Entity,纯数据的游戏属性抽象为Component,System是游戏某个功能模块,一个方法集合

ECS架构的思想是将Component作为游戏对象的筛选器,剥离数据状态和方法,将System模块独立出来,开发针对某一类具有特定Component的Entity的纯函数,System之间保证不相互干扰,从而保证程序的耦合性。

ECS解决的核心问题

性能,将数据紧密排列,同时将容易同时访问的Component放在一起,以这种方式取代类零散的数据分布能极大的提高缓存命中,从而提高性能

关于Unity2018 的JobSystem

扯到ECS就不得不提Unity2018对ECS的支持以及JobSystem,它能和ECS配合的非常好,JobSystem是Unity对并行的支持,在Unity中只有主线程才能访问Unity Api,JobSystem是为了让并行任务可以访问Unity Api,同时避免了使用多线程时的资源抢占,竞争安全,上下文切换等问题

为什么我要重构,而不是全面支持ECS

  • ECS开发的难度不比面向对象低,程序员不但要把握好Component的设计还要注意System以及Component的增删,还要时刻把握System的执行顺序。随着项目增大,对程序员的抽象能力以及设计能力还的要求会越来越高

  • 复用性,ECS模式是相当依赖于组件和前置条件的,换了一个项目使用,代码不可避免需要一番重构才能投入到新项目中。

猜你喜欢

转载自www.cnblogs.com/millionsmultiplication/p/9388481.html
ECS
今日推荐