Archetypes原型 (它的存在使得遍历组件的命中率非常高)

  • Archetype是一个容器,Unity规定每个ArcheType的大小16kb,不够就再开。始终保存内存的连续性

World 世界

  • World包含EntityManager、ComponentSystems、Achetypes(原型)
  • ECS默认提供一个世界。
  • 世界之间不具备互通性。

简单从MonoBehavior创建Entity

// Create entity prefab from the gameobject hierarchy once
var setting = GameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld, null);
var prefabEntity = GameObjectConversionUtility.ConvertGameObjectHierarchy(prefab, setting);
var entityManager = World.DefaultGameObjectInjectionWorld.EntityManager; // Efficiently instantiate a bunch of entities from the already converted entity prefab
var instance = entityManager.Instantiate(prefabEntity);
//SetComponentData
entityManager.SetComponentData(instance,new Translation{Value = Vector3.zero});

数据存储相关

Chunk的概念

Chunk是Unity ECS中特有的一个数据结构,在ECS部分代码中有大量使用,通常是指用来存放Component信息的与ArchetypeChunk,此外还有更一般的Chunk通过ChunkAllocator进行开辟,可以存放ArcheType中的各类型信息,大小和存储结构都与ArchetypeChunk不同,此处的Chunk特指存放ArcheType中Component信息的ArchetypeChunk。Chunk有以下几个特点:

EntityManager会将Component数据存放在固定的16kb大小的Chunk中(可以在Chunk定义中找到指定大小kChunkSize)

每个Chunk结构包含了这个区块中内容的相关信息

每个EntityArchetype都包括了一个Chunk的独特集合

一个chunk只能存在于一个archetype中

一个ArchetypeChunk结构是一个到具体Chunk的指针

每一个Chunk中包含的内容有:

一个指向其所归属的Archetype的指针

一个可以容纳多少个该Archetype类型Component数据的容量(Capacity)以及当前存放个数(Count),容量由Chunk的总大小除以单个Archetype所有Component大小之和得到

一个关于SharedComponentData值的索引(indices)数组,每个Chunk对于每种SharedComponentData类型只会存放一份具体值,所有在该Chunk上的Entity数据共享该值。

一个ChangeVersion表明该Chunk上每一种Component上一次被修改的时机

Entity中各ComponentData的具体数据,这边相同的类型的ComponentData会被放在一起,一种类型结束才是下一种

Chunk中正式ComponentData数据内容从Buffer字段开始,ComponentData的具体存储排列如图

最新文章

  1. 理解OAuth 2.0
  2. Unity全视角游戏的键盘操作位移——研究笔记
  3. RabbitMQ/JAVA 客户端连接测试
  4. SSIS连接Oracle遇到的问题
  5. 微软开源的30个基础设施项目-C#
  6. BestCoder Round #73
  7. sqlite3 SQL常用语句
  8. 语义化的HTML
  9. 关于本学期西南交通大学ACM-ICPC校集训队 训练计划(Beta 1.0)
  10. ANDROID SHAPE画圆形背景_ANDROID实现角标布局
  11. extjs_11_mvc模式
  12. nefu 519 昨日重现
  13. (java基础)Java输入输出流及文件相关
  14. uvalive 3635 Pie
  15. vue总结
  16. Kali linux2.0里Metasploit的postgresql selected, no connection问题解决
  17. vsftpd3.0.3配置
  18. 如何使用github来查找自己需要的(关心的)项目
  19. SpringMVC介绍及参数绑定
  20. 什么是代码?code?

热门文章

  1. Hive和HBase整合用户指南
  2. 用OpenPyXL处理Excel表格 - 向sheet读取、写入数据
  3. CODING DevOps 系列第五课:微服务测试——微服务下展开体系化的微服务测试
  4. .NETCore微服务探寻(三) - 分布式日志
  5. 【解读】TCP三次握手和四次挥手
  6. laravel生成key失败
  7. 入门大数据---Spark_RDD
  8. 深入理解RocketMQ(四)--消息存储
  9. dart快速入门教程 (6)
  10. Spring Boot2.x 的Druid连接池配置[附带监控]