Unity游戏开发中ECS思想介绍
ECS是啥?
ECS是一种编程思想,和传统的面向对象有区别
有一篇文章说的挺好,大家可以看看,这里只简要概括一下!
浅谈《守望先锋》中的ECS架构
ECS:
E(Entity)实体
C(Component)组件
S(System)系统
这个是一种编程思想,也算是一种游戏内容的开发框架
游戏里任何对象都可以抽象成 Entity ,我们也可以理解的 Entity=游戏对象
举个例子:一个技能实体算是Entity、一个特效实体、一个玩家实体等等。
游戏对象上的任何一个数据,就是一个Component,可以理解为 Component=对象的具体数据
举个例子:一个玩家的Entity上面有坐标信息,那么就是一个PositionCompoent,还有模型信息,那么就是一个ModelComponent
这个不包含任何方法,只是单纯的存储数据
管理游戏对象上的数据,就是一个System,可以理解为 System=具体逻辑
举个例子:对于玩家实体,我们想修改玩家的坐标,那么就需要一个MoveSystem,操作PositionComponent
用官方的图举个例子
额外特殊说明下,我认为框架有两种:
1.偏工具向的框架:
只是整合了一些工具,比如:资源系统、状态机、UI框架等等。这种框架和游戏内容完全无关
2.偏游戏内容向的框架:
就比如今天说的ECS框架,是会影响到游戏对象怎么更新,数据怎么存储。偏向于游戏的一个具体逻辑
那么ECS有什么好处呢?
从以下关键的几点介绍:
1.逻辑表现分离
因为我们现在要研究帧同步逻辑,帧同步就必须要做到逻辑表现分离
同时也可以针对数据记录关键帧,很容易做到预测以及回滚
2.组合模式优于继承原则
Componet的组合可以提高复用性
对某个功能进行拓展时,几乎不会影响到其它功能模块
3.提升性能
ECS面向数据变成的方式,使得内存排列天然紧密,可以增加CPU的缓存命中率
而且最新的DOTS也可以针对ECS进行性能提升
综上所述,最近就开始研究ECS了,使用的是Unity的Entitas这个插件:传送门
什么要用它呢?
其实ECS只是一种思想,并不依赖于任何插件,你只需要:
1.实现一个 IComponent
接口
2.实现一个 Entity
基类,实现 Get/Add/HasCompoent
等相关方法
3.实现一个 System
基类,获取相关的 Component 进行处理
自己也可以做,但是会有几个不方便的地方:
1.没有现成的可视化窗口(开发耽误时间)
2.没有代码生成器,Compoent里面的变量访问不到等问题
有兴趣的可以自己试试,这里就不多阐述了
那么下一章的内容,就是使用Entitas实现一个简单的逻辑表现分离的Demo!
Unity游戏开发中ECS思想介绍相关推荐
- Unity游戏开发中的向量运算-点乘和叉乘
Unity游戏开发中的向量运算-点乘和叉乘 1.点乘: 定义: 又称点积.数量积.标量积.既可以由向量坐标的代数运算得出,也可以通过引入两个向量的长度和角度等几何概念来求解. 公式一: 公式二: 点积 ...
- 游戏开发中的物理介绍
游戏开发中的物理介绍 碰撞对象 物理过程回调 碰撞层和蒙版 GUI示例 代码示例 Area2D StaticBody2D RigidBody2D KinematicBody2D 在游戏开发中,您通常需 ...
- PureMVC在Unity游戏开发中的应用
作为开发人员,我们都想写出优雅的代码,可又苦于自身能力不知该如何下手,而框架的作用正在与能够让你规范的去开发. 之前写Web的时候,总被要求采用MVC架构,的确非常好用,也从来没有质疑过这种架构的好与 ...
- Unity游戏开发中的内存管理_资料
http://mp.weixin.qq.com/mp/homepage?__biz=MzAwMTUzOTczNQ==&hid=6&sn=44228b7260d7a5a3287a4499 ...
- Unity游戏开发之游戏存档方式
目录 1.Unity自带存储方式PlayerPrefs 2.XML存储方式 3.Json类型存储方式 1.Unity的序列化问题 2.Unity中支持序列化的类 3.Unity中Json的使用方法 4 ...
- unity 角度限制_喵的Unity游戏开发之路 推球:游戏中的物理
前言很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本 ...
- Unity游戏开发——Excel数据读取到游戏中
C# Unity游戏开发--Excel中的数据是如何到游戏中的 (一) 引言 现在做游戏开发的没有几个不用Excel的,用的最多的就是策划.尤其是数值策划,Excel为用户提供强大的工具,各种快捷键, ...
- 游戏开发常用引擎工具介绍对比区别(UE4,Unity,Cocos,LayaAir,[egret白鹭])
UE4(即虚幻4) 是一套为开发实时技术而存在的引擎工具.目前广泛应用于3D建模渲染.游戏开发中.它完善的工具套件以及简易的工作流程能够使开发者快速修改或查看成果,对于代码的依赖性很低.而完整公开的源 ...
- 喵的Unity游戏开发之路 - 推球:游戏中的物理
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
最新文章
- Swift - 使用 Protocol 避免框架之间循环引用
- HDU-2732 Leapin' Lizards 最大流
- 谈谈Koa 中的next
- textarea实现datalist效果_手把手撸代码实现Virtual Dom amp;amp; Diff
- 部署到ABAP服务器上的SAP UI5应用,其index.html的读取逻辑
- 鸿蒙科技与文化,数字阅读 | “华为鸿蒙”:当现代科技遇到古典文化
- 大数据分析必须要会的数据预处理操作(二)!!!
- opencv+python 自动绿帽机
- java删除文件夹分享企,java删除文件夹下所有文件示例分享
- matlab BP神经网络入门
- Git Tortoise安装 CodeHub
- 一台“真正的”网吧电影服务器只要6000元
- 思想实验及其在科学发展中的作用
- 144hz和60hz测试软件,专业FPS玩家讲解:60Hz与144Hz刷新率的问题
- Intouch学习笔记—新建工程
- 获取特定时间的时间戳,以及在使用时ios不生效问题
- 绿盟2016春季校招web前端笔试
- Codeforces Round #702 C. Sum of Cubes
- java公众号上传素材及发送图文消息实现
- 借助向 Dev Channel 內部人員提供的最新預覽版本,Microsoft 已將舊版本地管理員密碼解決方案(也稱為 LAPS)直接集成到 Windows 11 中