首页 > 其他分享 >个人对于 ECS 的理解

个人对于 ECS 的理解

时间:2023-01-15 18:34:36浏览次数:57  
标签:游戏 个人 DOD 理解 ECS 更新 组件 内存

前言

在游戏引擎中,游戏对象的状态更新基本是由组件的生命周期来实现,比如在 update 中更新位置

但如果需要更新的游戏对象越多,各自处理自己的状态更新就会让游戏维护变的困难,比如将所有角色移动速度加快指定数值,需要在每个对象状态更新的位置修改,而 ECS 则可以统一、批量处理

结构

  • E: 实体,游戏对象,由多个组件组成
  • C: 组件,单一职责,比如位移,跳跃
  • S:系统,负责指定类型的组件生命周期管理,比如移动系统(包含位移,跳跃)

解决了什么问题?

  • 将分布式状态同步改为统一处理,减少游戏复杂度,增加可维护性

  • DOD/ECS 利用数据局部性可以让游戏性能提高

DOD:Data Oriented Design(面向数据的设计)

什么时候适合用 ECS?

游戏需要处理大量不同类型对象的状态更新时使用,如果是类似捕鱼类游戏,对象的更新基本只存在鱼和子弹上,那么就没太大必要使用 ECS,但如果类似英雄联盟,不同的角色几十个包含不同的技能,就比较适合使用 ECS

如何在 ts 中使用 DOD/ECS ?

在 ts 中我们只能使用 TypesArray,也就是 ArrayBuffer、Uint8Array、Float64Array,这些类型来保证数据局部性,当然,使用这些类型数组我们 需要自己管理内存 的大小,以保证是连续的一块内存,这样才能保证缓存命中

  • 系统需要知道每个组件占用的内存(相同类型的组件使用的内存大小必须一致)
  • 我们只能存储基础数据类型到内存

参考:

标签:游戏,个人,DOD,理解,ECS,更新,组件,内存
From: https://www.cnblogs.com/muzzik/p/17053894.html

相关文章

  • 个人理解八皇后问题
    程序源文件下载地址在文章后面。---------------------------------------------------------------------八皇后问题,网上的解法很多,在此我说一下自己的理解,权当是学习笔记......
  • SpringMVC:理解SpringMVC相关概念
    SpringMVC_day01今日内容理解SpringMVC相关概念SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装。对于SpringMVC我们主要学习如下内容:Spr......
  • Python的多态怎么理解
    之前搜索的解释都说鸭子模型,什么一个东西只要它叫起来像鸭子、走起来像鸭子、xxx的,它就可以被称为鸭子......
  • 正则化:五重境界理解减少过拟合的神器
    ​本文来自公众号“AI大道理” 正则化作为减少过拟合的手段被大量的使用,那么为什么会出现过拟合呢?正则化又是什么?是怎么样发挥作用的呢? ​ ......
  • 《动手学深度学习》Accumulator累加器的理解
    部分代码因为样式原因看不清,忘记应该怎么改鼠标选中之后就能看清了classAccumulator:"""在n个变量上累加"""def__init__(self,n):self.data=[......
  • PBN主区代表95%时间概率的范围,这个理解对么?
    一直以来在我的印象中,PBN主区宽度就代表95%时间概率内飞机所处的位置范围,而保护区总宽度则代表99.7%时间概率内的活动范围。在我的视频课程中也是这样来讲述的,但这......
  • 理解宏定义
    宏定义作用:对源程序编译之前做一些处理,生成扩展C源程序l种类•宏定义#define•文件包含#include•条件编译#if--#else--#endif等l格式:•“#”开头•占单独书写......
  • 个人常用软件记录
    B站直播录制和编码:B站录播姬B站视频下载:DownKyim3u8视频下载:N_m3u8DL-CLI_v3.0.2视频快速剪辑:LosslessCut视频字幕制作:Aegisub视频字幕压制:ShanaEncoder音视频处理工......
  • 深入理解ClassPathBeanDefinitionScanner
    1介绍ClassPathBeanDefinitionScanner可以扫描指定路径下的@Component类,将这些类解析成BeanDefinition,注册到Spring容器中。此外,ClassPathBeanDefinitionScanner通过注......
  • 【架构设计】你真的理解软件设计中的SOLID原则吗?
    前言在软件架构设计领域,有一个大名鼎鼎的设计原则——SOLID原则,它是由由RobertC.Martin(也称为UncleBob)提出的,指导我们写出可维护、可以测试、高扩展、高内聚、低耦合......