Unity DOTS1.0 入门(1) ECS机制与概述

ECS机制与概述

Entity:实体

  • 由一个一个的Component组合在一起,是连续的内存布局。
  • 通过EnitityManager来负责高效的分配和释放相关entity.

World:世界

  • 一个entity的集合,在当前世界里面,每个Entity都有唯一不同的entityld;
  • 运行时Unity会自动创建一个Default World,然后把所有需要迭代的system全部假如到这个World中

ArchType

  • 几个Component组成的数据为一个ArchType,这个决定了这些Component的内存排布
  • 由多少种Component的组合,就有多少个ArchType

Chunk

16Kb 大小,用来存放拥有同样的ArchType的Entities,产生连续的内存布局

Component:组件数据简介(下一节详解)

  • 一般用Struct,可以定义为Class
  • 不包含任何逻辑或行为,只是纯数据
  • 由EntityManager来添加或者删除

System:代码算法

  • 可通过多线程处理数据,通过components获得需要处理的数据
  • World Update 会迭代System
  • 伪代码:遍历wordl里面所有的System控制entityA移动;
    • System.OnUpdate(ref TransformComponent, ref SpeedComponent, ref comp3){ 更新Transfrom 数据,这样,物体就移动了; }

Job System: 多线程开发支持

  • 使用线程池迭代System,数据是使用组件数据。

EntityQurey

  • 用来查询组件数据
  • 到ArchType管理的所有组件组合的内存块里面,把某些类型的组件数据,拿回来,放到一个连续的内存块里面,然后给System使用。

Burst工具链

  • 传统il2cpp 将.net转为cpp代码,然后再编译运行
  • Burst工具链 将.net代码LLVM 转为natvie code,使用了"单指令多数据集"MMS
  • MMx指令集实质是一种SIMD数据处理方式(单指令流,多数据流)。由Intel公司开发,它允许CPU同时对2-4个甚至8个数据进行并行处理。内存拷贝时,可一次拷贝8个字节,内存拷贝性能会变得成倍的提升
相关推荐
aerror2 小时前
如何正确的用Trae 打开 Unity 3D 项目
3d·unity·游戏引擎
步、步、为营3 小时前
.NET 的IOC框架Unity代码示例
unity·游戏引擎·.net
留待舞人归7 小时前
【Unity优化】提高热更新和打包速度
游戏·unity·游戏引擎·unity3d·优化
tealcwu7 小时前
【Unity踩坑】Unity 6在Mac平台编译运行时去除‘trial version‘
macos·unity·游戏引擎
为你写首诗ge9 小时前
【热更新知识】学习一 Lua语法学习
unity·lua
为你写首诗ge10 小时前
【热更新知识】学习三 XLua学习
unity·lua
T.D.C19 小时前
【动画】Unity2D骨骼动画-Animation2D
unity·动画
AgilityBaby19 小时前
Unity实现不倒翁
笔记·unity·c#·游戏引擎
XR-AI-JK2 天前
Unity VR/MR开发-开发环境准备
unity·vr·mr
T.D.C2 天前
【渲染】Unity-分析URP的延迟渲染-DeferredShading
unity·游戏引擎