首页 > 其他分享 >【unity】ECS

【unity】ECS

时间:2022-11-02 22:12:38浏览次数:77  
标签:浅谈 Unity Component System unity ECS 组件

前言

ECS的设计理念早在90年代就存在了,但由于2017年《守望先锋》游戏团队在大会上的分享,再次走入了大众的视野。今天记录一下相关内容。

ECS的结构

ECS分为Entity(实体)-Component(组件)-System(系统),它的本质是数据和逻辑分离。

Entity

Entity(实体)和Unity中的GameObject类似,它表示一个游戏物体。

它上面可以挂载任意组件,实体能做什么完全由它身上的组件决定。如果它上面什么组件都没有,那它就什么也干不了。

Component

Component(组件)和Unity中的Component类似,它能赋予实体某个特定的功能。

不同的是,ECS中的组件只封装了数据,本身不进行任何逻辑处理,所有逻辑交给System处理。

System

System(系统)用于处理Component中的各项数据。

它本身不存储任何数据,只进行逻辑处理;而且每个系统只专注于自己负责的逻辑。

在每一Update或者说Tick中,它都会遍历场景中的组件,对其进行逻辑处理。

ECS案例

指路->浅谈Unity ECS(三)Uniy ECS项目结构拆解:功能要点及案例分析

ECS的优点

  1. “组合大于继承”。
    ECS广泛采用组合的方式来组织代码结构。这使得整个项目的结构变得扁平,复杂度降低,维护起来十分方便。OOP最被诟病的调用层次深,结构复杂等问题都被解决了。

  2. ECS能提高性能。其原因是数据连续存放,这一点对CPU缓存友好。
    指路->浅谈Unity ECS(二)Uniy ECS内存管理详解:ECS因何而快

  3. 存档/读档易于实现。
    由于组件中只保存数据,存档时只需保存对应的实体和组件数据;读档时加载数据并运行System即可。

ECS可能引发的问题

  1. ECS没有提供天然的多态支持。多态必须通过为Entity装配不同的component来实现。

  2. 很多传统的系统在ECS中很不好做,比如行为树和技能。不过这个问题可能可以通过保留EC,把S封装成OO来处理。框架好用才是王道。

  3. 由于每一帧各类System都会遍历场景内的实体,对上面的组件进行逻辑操作,所以实体的销毁要放到帧末进行,否则可能造成空引用。

参考资料

浅谈Unity ECS(一)Uniy ECS基础概念介绍:面向未来的ECS

浅谈Unity ECS(二)Uniy ECS内存管理详解:ECS因何而快

浅谈Unity ECS(三)Uniy ECS项目结构拆解:功能要点及案例分析

漫谈Entity Component System (ECS)

架构设计之从OOP到ECS架构演进

标签:浅谈,Unity,Component,System,unity,ECS,组件
From: https://www.cnblogs.com/OtusScops/p/16852115.html

相关文章

  • 【unity】MVC
    前言MVC是非常经典的分层设计,是时候记录下来了。什么是MVCMVC是XeroxPARC在二十世纪八十年代为编程语言Smalltalk-80设计的一种软件框架模式,其中定义了Model-View-Contr......
  • SECS/GEM协议对接简述
    前段时间因业务需要,对接了KNS焊线机(型号:ConnXLED)特此记录。 SECS/GEM协议,按照个人理解,它根本上来说还是socket,只是把消息规定了格式,必须按照格式进行通讯。 ......
  • Unity 免费资源网站
    UnityFreakshttps://unityfreaks.com/UnityAssets4Freehttps://unityassets4free.com/Game-Assethttps://game-asset.infoGameAssetsFreehttps://gameassetsfree.......
  • Unity PostProcessing : Outlines
    写在前面:本文章为个人学习笔记,方便以后自己复习,也希望能帮助到他人。由于本人水平有限难免出现错误,还请评论区指出,多多指教。部分图元和素材来源于网络,如有侵权请联系本......
  • Unity PostProcessing : Boxblur
    写在前面:本文章为个人学习笔记,方便以后自己复习,也希望能帮助到他人。由于本人水平有限难免出现错误,还请评论区指出,多多指教。部分图元和素材来源于网络,如有侵权请联系本......
  • Unity坐标系入门
    一、坐标系的概念Unity世界坐标系采用左手坐标系,大拇指指向X轴(红色),食指指向Y轴(黄色),中指向手心方向歪曲90度表示Z轴(蓝色),同时Z轴也是物体前进方向,下图表示Unity的四......
  • Unity Processing Basic
    写在前面:本文章为个人学习笔记,方便以后自己复习,也希望能帮助到他人。由于本人水平有限难免出现错误,还请评论区指出,多多指教。部分图元和素材来源于网络,如有侵权请联系本......
  • 在Unity中制作一个时钟
    一、创建时钟准备工作:新建一个Unity工程项目,这里我使用的是2021.3.4f1c1的版本,以前一直使用的是2020.1.3f1c1的版本,这次用新的版本也是为了熟悉新版本的交互界面,从2021......
  • Unity —— Dialogue System for Unity
    DialogueSystemforUnity一款受过市场考验的叙事插件,至今收获720篇5星好评的高分插件,2020年上线的优秀作品有《极乐迪斯科(DiscoElysium)》、《珍妮的线索(JennyLeclue:De......
  • 用Unity实现Dota2角色Shader(以Ogre Magi为例)
    写在前面:本文章为个人学习笔记,方便以后自己复习,也希望能帮助到他人。由于本人水平有限难免出现错误,还请评论区指出,多多指教。部分图元和素材来源于网络,如有侵权请联系本......