Lazy loaded image
ECS-数据导向
Words 1318Read Time 4 min
2024-12-7
2025-4-3
type
status
date
slug
summary
tags
category
icon
password
😀
OOP大部分人都很熟悉,那DOP呢,其实也就是object变成了data,但DOTS(多线程式数据导向型技术堆栈。)的核心思想就是DOP,这里主要不说DOTS,因为我自己也没用过,但其核心组成就是ECS挺有意思,有点想学,但目前还只停留在了解的阶段。

ECS(Entity-Component-System)

ECS是一种常见的游戏开发架构模式,主要用于管理游戏对象(Entities)、数据(Components)和行为(Systems)。ECS的核心思想是将数据和行为分离,以提高代码的灵活性、可维护性和性能.
  • Entity(实体):实体是游戏中的基本对象,通常只是一个唯一的标识符(如整数ID)。实体本身不包含任何数据或行为,它只是一个“容器”,用于关联组件。
  • Component(组件):组件是纯粹的数据结构,用于描述实体的某个属性或状态。例如,一个“位置”组件可能包含 x 和 y 坐标,一个“生命值”组件可能包含当前生命值和最大生命值。一个实体可以拥有多个组件。
  • System(系统):系统是处理逻辑的部分。每个系统负责处理一组具有特定组件的实体。例如,“渲染系统”会处理所有具有“位置”和“渲染”组件的实体,并将它们绘制到屏幕上。

ECS的原理

ECS是一种常见的游戏开发架构模式,主要用于管理游戏对象(Entities)、数据(Components)和行为(Systems)。ECS的核心思想是将数据和行为分离,以提高代码的灵活性、可维护性和性能.
  1. 创建实体:首先创建一个实体,通常只是一个唯一的ID。
  1. 添加组件:为实体添加所需的组件。例如,为一个玩家实体添加“位置”、“生命值”、“渲染”等组件。
  1. 系统处理:系统会遍历所有具有特定组件的实体,并执行相应的逻辑。例如,“移动系统”会遍历所有具有“位置”和“速度”组件的实体,并根据速度更新它们的位置。

简单的ECS示例


核心设计说明:

  1. 组件 (Component)
  • 使用结构体存储数据(值类型更符合ECS内存友好特性)
  • 通过 IComponent 接口标记组件类型
  1. 实体 (Entity)
  • 使用字典存储组件集合
  • 提供组件查询的泛型方法
  1. 系统 (System)
  • 通过继承抽象类实现具体逻辑
  • 在Update中筛选具有特定组件组合的实体
  1. 世界 (World)
  • 统一管理所有实体和系统
  • 驱动所有系统的更新
 
💡
感觉ECS其实比较适合大型复杂的游戏,尤其是有大量的游戏对象的项目,可以用ecs管理其复杂的交互逻辑,同时也适合需要高性能和高灵活性的项目,总之这套开发架构很好用,不过有上手成本,作者本人也还在摸索中~
上一篇
Unity一键处理图片工具
下一篇
AI绘图工具该怎么选(小白入门)

Comments
Loading...