精华内容
下载资源
问答
  • ECS架构

    2021-05-20 21:19:47
    ECS架构 如何评价《守望先锋》架构设计? https://www.zhihu.com/question/61169850 浅谈《守望先锋》中的 ECS 构架 https://blog.codingnow.com/2017/06/overwatch_ecs.html#more 热更新:不经过应用...

    ECS架构

    如何评价《守望先锋》架构设计?https://www.zhihu.com/question/61169850
    浅谈《守望先锋》中的 ECS 构架https://blog.codingnow.com/2017/06/overwatch_ecs.html#more
    • 热更新不经过应用商店,在应用内部实行的即时更新。尤其常见与游戏软件,因为他们BUG的修复和新(小)功能的添加是很高频率的。2017年,苹果由于热更新下架了70多款软件,
    • SDK:Software Development Kit,软件开发者工具包,SDK正是提供了一整套开发Windows应用程序所需的相关文件、范例和工具的“工具包”。
    • gameplay:游戏可玩性
    • 疑问,所以现在苹果支持热更新嘛?

    1:优点

    • 模式简单。如果还是觉得复杂,推荐看看 GoF 的《设计模式》。
    • 概念统一。不再需要庞大臃肿的 OOP 继承体系和大量中间抽象,有助于迅速把握系统全貌。同时,统一的概念也有利于实现数据驱动(后面会提到)。
    • **结构清晰。**Component 即数据,System 即行为。Component 扁平的表达有助于实现 Component 间的正交。而封装数据和行为的做法,不仔细设计就会导致 Component 越来越臃肿。
    • **容易组合,高度复用。**Component 具有高度可插拔、可复用的特性。而 System 主要关心的是 Component 而不是 Entity,通过 Component 来组装新的 Entity,对 System 来说是无痛的。
    • **扩展性强。**增加 Component 和 System,不需要对原有代码框架进行改动。
    • **利于实现面向数据编程(DOP)。**对于游戏开发领域来说,面向数据编程是个很重要的思路。天然亲和数据驱动的开发模式,有助于实现以编辑器为核心的工作流程。
    • **性能更好优化。**接上条,相比 OOP 来说,DOP 有更大的性能优化空间。(详见后面章节)。同时讲数据更好的组织,能够提高 CPU cache的命中率,并行化

    2:基本原理

    在 ECS 框架中,把每个可能单独使用的对象属性归纳为一个个 Component ,比如对象的名字就是一个 Component ,对象的位置状态是另一个 Component 。每个 Entity 是由多个 Component 组合而成,共享一个生命期;而 Component 之间可以组合在一起作为 System 筛选的标准。我们在开发的时候,可以定义一个 System 关心某一个固定 Component 的组合;那么框架就会把游戏世界中满足有这个组合的 Entity 都筛选出来供这个 System 遍历,如果一个 Entity 只具备这组 Component 中的一部分,就不会进入这个筛选集合,也就不被这个 System 所关心了。

    展开全文
  • ECS架构笔记

    千次阅读 2018-06-29 15:56:30
    ECS不是银弹,但在3D引擎领域是一个比较合适的框架, 目前的大多数现代3D引擎,或多或少都采用这种设计思想,比如Unity, UnReal。...在这近一年的工作中,我基本经历了从传统渲染树到ECS架构的变化,感...

    ECS的介绍 云风写的非常好: https://blog.codingnow.com/2017/06/overwatch_ecs.html#more

    ECS不是银弹,但在3D引擎领域是一个比较合适的框架, 目前的大多数现代3D引擎,或多或少都采用这种设计思想,比如Unity, UnReal。当然后面应该会有更为先进的框架出现。

    在这近一年的工作中,我基本经历了从传统渲染树到ECS架构的变化,感受到ECS在这个领域的相对先进性,记录一下。就自己之前做Android的经历,很多人只能接触到MVC/MVP/MVVM(因为它们够简单直白),架构思想被限制在一个界限内。ECS是不适合UI层设计的,但是它提供了一种新的视角和理念。

    1. ECS是一个典型设计思想的体现: 组合大于继承,Entity在这个体系里完全被剥离成一个最纯粹的锚点,他的属性只有一个:存在性。所有的功能都由Component和System协同来完成。Entity只提供了Component锚定和组织作用(组织作用其实也被极度弱化,可以理解为一个最简单直白的集合)。Component和System可以自由靠挂,扩展性很强。
    2. System和Component体现了单一职责的设计理念: 每种类型的System和对应的Component高度契合,两者结合在一起实现了某一类的特定功能(当然,一对一的关系不是绝对的,某些Component可能和会复数的System交互,这是合理的,Component是数据,而数据是中性的)。
    3. System和Component的协同关系某种意义上不是OOP,而是AOP。System是无状态的功能切片,而Component则作为数据和状态的被动维护者。System只处理自己对应的Component,对其他的Component和System基本保持一个不可知状态(在ECS中,System之间协作应该是需要被克制的),保证了功能之间的隔离性。
    4. ECS相较之前传统3D引擎设计思路的一个最明显的区别是: 连”位置”这个概念都会被处理为一个Component。而不是传统思路中,基于位置关系来构造整个场景树。是Entity纯粹存在性的一个体现。ECS是一个集合,而非一棵树,树关系体现通过位置Component之间的串接来体现。
    5. 个人认为ECS在隔离性上做的很好,但是高隔离的代价是通信和数据汇总会相对困难,不过前者一般是由引擎的调用者来实现的业务逻辑。后者,Entity作为一个锚点,完全可以基于这个锚点将其靠挂的Component全部获取,来得到汇总的数据,这个操作是外面逻辑进行,还是引擎提供便利化封装,甚至专门做一个汇总型的Component(不过已经破坏了ECS的隔离性,一种类型的Component会感知到其他类型的Component,甚至了解其细节),应该有一定的选择自由度。
    6. ECS处理的是这样一个场景: 有一堆实体的集合,每个实体有一些共性,但是也会有自己的特殊性和处理逻辑。后期新实体和新特性的引入要对旧逻辑造成最小的影响。
    展开全文
  • ECS架构初探

    2019-01-24 11:02:00
    1 什么是ECS架构 ECS是 Entity-Component-System(实体-组件-系统)的缩写,其模式遵循组合优于继承的原则。 - Entity 游戏内的每个基本单元都是一个实体,每个实体里面有多个组件。 - Component 每个组件仅...

    refs:  https://zhuanlan.zhihu.com/p/30538626

     

    1 什么是ECS架构

    ECS是 Entity-Component-System(实体-组件-系统)的缩写,其模式遵循组合优于继承的原则。

     

    - Entity 游戏内的每个基本单元都是一个实体,每个实体里面有多个组件。 

    - Component  每个组件仅包含代表其特征的数据,例如:移动相关的组件仅仅包含速度、位置、朝向等属性。一旦一个实体拥有了MoveComponent组件便可以认为它拥有了移动的能力。

    - System 系统是用来处理拥有一个或者相同的几个组件的实体集合的工具,其只拥有行为(在系统中没有任何的数据)。在移动相关的组件的例子中,处理移动的系统仅仅关心拥有移动能力的实体,它会遍历所有拥有MoveComponent组件的实体,并且根据相关的数据(速度、位置、朝向等),更新实体中的组件的属性。

     

    实体组件之间是一对多的关系,实体拥有怎么样的能力,完全取决于其拥有哪些组件,通过动态的删除与修改实体中的组件,可以改变实体的行为。

     

    2 ECS的基本结构

    一个使用ECS架构开发的游戏的基本结构如下:

     

    world是实体与系统的集合,而实体就是一个ID,这个ID对应了组件的集合。组件用来存储游戏状态并且没有任何行为,系统拥有处理实体的行为但是没有状态。

     

    3 详解实体、组件与系统

    3.1 实体

    实体是一个概念上的定义,是游戏世界中的一个独特的物体,是一系列组件的集合,为了方便区分不同的实体,在代码层面上一般用一个ID来进行表示。所有组成这个实体组件将会被这个ID标记,从而明确哪些组件属于该实体。由于其是一系列组件的集合,因此可以在游戏运行的时候在实体中添加一个或者删除一个组件。

    样例:

    • Player(Position, Sprite, Velocity, Health)
    • Enemy(Position, Sprite, Velocity, Health, AI)
    • Tree(Position, Sprite)

    注:括号前为实体名,括号内为该实体拥有的组件

     

    3.2 组件

    一个组件是一堆数据的集合,可以使用C语言中的结构体来进行实现。它没有方法,即不存在任何的行为,只用来存储状态。

    样例:

    • PositionComponent(x, y)
    • VelocityComponent(X, y)
    • HealthComponent(value)
    • PlayerComponent()
    • EnemyComponent()

    注:括号前为组件名,括号内为该组件拥有的数据

    3.3 系统

    系统是游戏中用来处理逻辑的部分,一个系统就是对拥有一个或多个相同组件实体集合进行操作的工具,它只有行为没有状态,即不应该存放任何数据。

    举个例子,游戏中玩家要操作对应的角色进行移动,由上面两部分可知,角色是一个实体,其拥有位置和速度组件,那么怎么根据实体拥有的速度去刷新其位置呢,MoveSystem(移动系统)登场,它可以得到所有拥有位置和速度组件的实体集合,遍历这个集合,根据每一个实体拥有的速度值和物理引擎去计算该实体应该所处的位置,并刷新该实体位置组件的值,至此,完成了玩家操控的角色移动了。

    系统这里比较麻烦,还存在一个常见问题:由于代码逻辑分布于各个系统中,各个系统之间为了解耦又不能互相访问,那么如果有多个系统希望运行同样的逻辑,该如何解决,总不能把代码复制 N 份,放到各个系统之中。UtilityFunction(实用函数) 便是用来解决这一问题的,它将被多个系统调用的方法单独提取出来,放到统一的地方,各个系统通过 UtilityFunction 调用想执行的方法,同系统一样, UtilityFunction 中不能存放状态,它应该是拥有各个方法的纯净集合。

    样例:

    • MoveSystem(Position, Velocity)
    • RenderSystem(Position, Sprite)

    注:括号前为系统名,括号内为该系统关心的组件集合

     

    4 实战

    转载于:https://www.cnblogs.com/whpointz/p/10307772.html

    展开全文
  • ECS架构

    需求

    Priests and Devils

    Priests and Devils is a puzzle game in which you will help the Priests and Devils to cross the river within the time limit. There are 3 priests and 3 devils at one side of the river. They all want to get to the other side of this river, but there is only one boat and this boat can only carry two persons each time. And there must be one person steering the boat from one side to the other side. In the flash game, you can click on them to move them and click the go button to move the boat to the other direction. If the priests are out numbered by the devils on either side of the river, they get killed and the game is over. You can try it in many > ways. Keep all priests alive! Good luck!

    类的设计

    类图
    具体代码请参考下面仓库地址。

    ECS架构

    为什么要做的这么复杂呢,试想,如果不采用这种模式,思考如何解决以下问题:

    1. 点击牧师后,船怎么知道是谁要上船?
    2. 怎么判断牧师在船上还是在岸上
    3. 怎么判断点击的牧师在左岸还是右岸?

    说白了ECS架构就是解决这种游戏对象实例过多而造成对象之间通信复杂化,耦合变高,维护困难。对象承受了过多不该承受的职责。我们的目标就是把这些职责分离开:Entity(实体),Component(组件),System(系统)。其核心思想就是组合优于继承

    其实Unity本身就是遵循这种架构的,已经帮我们把整体的框架都搭好了,比如每次创建新对象的时候都默认给你创建了Tranfrom,render等组件。

    Entity对应的就是实际的GameObject,就是实实在在被放置在场景中的物体,船,牧师,魔鬼,岸 。

    Component就是运动组件Move和鼠标事件处理组件ClickGUI等,保证相关的任务只交给对应的组件去处理,上层系统只需要知道处理的结果是什么,不需要关注过程和其中涉及到的数据,这样就保证了高内聚性。

    System对应各种各样的牧师控制器,魔鬼控制器,船控制器,他们拥有关于某个实体的数据,通过组件来实现各种各样的功能(运动,鼠标监听),控制实体的生命流程。

    相关链接

    • 仓库地址: https://gitee.com/liht29/unity3d/tree/master/hw2_PastorAndDemon
    • 项目演示:https://www.bilibili.com/video/BV1JQ4y1B7YA/

    Unity编程

    多文件编程时如何编写类?

    使用命名空间

    在牧师魔鬼游戏中,需要设计较多的类,全部混在一起会相当混乱,我们可以通过命名空间将不同的类联系起来。

    文件目录

    运行时报错

    初始化
    the object you want to instantiate is null.
    查阅资料是目录结构的问题,Resources.Load默认是在Assets下的Resouces目录下查找相关文件的,所以将Prefab文件移动到此即可使用Prefabs/boat来读取模型

    展开全文
  • ECS架构 ECS架构就是实体,组件,系统架构,从守望先锋开始为人所熟知,越来的,人们开始注意到ECS的强大之处,越来越多的游戏使用到了ECS的架构,Unity在2019年版本里正式发布了pakeage来支持ECS架构。 目前包含...
  • 在思考ECS架构并行处理之前,我先思考了一下ECS架构对游戏业务逻辑的影响,游戏能否使用纯ECS架构?我参考了最为普通但是最重要的业务逻辑角色控制。 角色控制包括角色的创建,角色的更新,角色的销毁,这三个主要...
  • 突破:采用严格的ECS架构实施的突破游戏。 用作测试台
  • 游戏开发中的ECS 架构概述

    万次阅读 多人点赞 2018-08-06 11:12:02
    0x00 何为ECS架构 ECS,即 Entity-Component-System(实体-组件-系统) 的缩写,其模式遵循组合优于继承原则,游戏内的每一个基本单元都是一个实体,每个实体又由一个或多个组件构成,每个组件仅仅包含代表其特性的...
  • 游戏开发中的ECS架构

    2020-06-25 23:52:12
    0x00 何为ECS架构 ECS,即 Entity-Component-System(实体-组件-系统) 的缩写,其模式遵循组合优于继承原则,游戏内的每一个基本单元都是一个实体,每个实体又由一个或多个组件构成,每个组件仅仅包含代表其特性的...
  • https://github.com/050602/Unity-PuerTS-ECShttps://github.com/050602/Unity-PuerTS-ECS在TS尝试实现 ECS架构 内置PuerTs和FairyGUI Unity版本 2020.3.15
  • Entitas是德国Wooga公司开源的一款ECS架构,不只是C#,还有其他多种语言版本,基本涵盖了目前主流的计算机语言
  • ecs架构思考

    2019-10-06 21:47:14
    系统管理者, ecs本身要处理的是遍历, 遍历结构处理事情。 而不同的场景要处理的事务是不一样的, 所以系统是要动态增加或者减少的。 而实体代表着一个真正的对象, 对象本身是复杂的, 拥有多种属性的。但系统的...
  • ECS架构 Entitas-CSharp学习之路(一)

    千次阅读 2018-04-10 20:45:16
    我需要学习一下其他人的代码和架构,查找了一下github几个star比较高的unity框架,发现了它——Entitas,最近知乎unity讨论比较热乎的ECS架构。 那么就玩玩吧,反正我一个学生党很闲很作,而且多学学...
  • 再谈ECS架构

    2021-06-18 23:37:46
    还是从我最开始接触游戏的时候说起,那时候的客户端架构使用了很多继承,这种设计的思路是“继承了基类也就意味着继承了基类的能力”,如果我们不从语言的角度来讨论继承和组合,只从框架逻辑来说,继承相当与组合的...
  • ECS架构的思考

    2020-12-04 18:33:13
    最近在整理Demo代码,遇到一个设计问题,这个问题是transform组件到底放到哪里比较合适?我们都知道逻辑,物理,渲染模块都会用到transform...比如将instance buffer放到ResourceNode中(FrameGraph架构),而ResourceN
  • ECS架构 ECS全称EntityComponentSystem(实体组件系统) 即: 在一个叫Entity的东西上添加一个个组件,最终形成一个完整的整体,而System是负责逻辑的,执行时调用System的逻辑。 IL2CPP 在2014年年中的时候,Unity...
  • ECS架构学习笔记

    千次阅读 2019-04-19 13:39:31
    以“组合优于继承”的思想进行架构。 组件的优点 在实体涉及多个领域时保持领域互相隔离 方便的增删改组件,通过继承实现组件接口,就能自定义组件从而定义不同的对象 避免菱形继承或不精确的继承 设计要点 组件通信...
  • 从OOP到ECS架构演进

    2021-07-31 16:51:03
    ECS架构能很好的解决上面的几个问题,ECS架构主要分为: Entity:用来代表任何一个游戏对象,但是在ECS里一个Entity最重要的仅仅是他的EntityID,一个Entity里包含多个Component Component:是真正的数据,ECS...
  • ECS是一个可以基于现有的游戏引擎开发的架构,它是Entity、Component、System的集合简称,在游戏开发中,component仅用来存储数据,多个component可组成一个entity,而system多用于操作component,真正做到了以数据...
  • unity-ECS架构Entitas记录

    2018-01-26 17:55:23
    title: unity-ECS架构Entitas记录 categories: Unity3d tags: [unity, ecs, 架构, 设计] date: 2018-01-27 17:09:18 comments: false 关于 ECS框架 Entitas 的相关记录 前篇 官网 ...
  • 游戏设计模式——ECS架构

    千次阅读 多人点赞 2018-10-26 21:33:13
    1.ECS概述  ECS全称Entity-Component-System(实体-组件-系统),是基于组合优于继承(将不变的部分使用继承以方便复用, 将多变的部分用组合来方便拓展)的原则的一种模式,游戏中的每一个单元(怪物、相机等)...
  • ECS架构完美实现帧同步

    千次阅读 2019-11-17 14:02:42
    而与一些服务器的逻辑是客户端不需要的,如何用一种方式来处理网络同步和帧同步中复杂的逻辑,有没有一种架构来简化这种帧同步实现的复杂度,这就是最后我们要提到的ECS架构,下面就是一些收集的概念性质的东西。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,813
精华内容 5,925
关键字:

ecs架构