Unity-ECS-实践
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的具体存储排列如图
Unity-ECS-实践的更多相关文章
- Unity 最佳实践
转帖:http://www.glenstevens.ca/unity3d-best-practices/ 另外可以参考:http://devmag.org.za/2012/07/12/50-tips- ...
- Unity ECS 视频笔记
视频摘要 本文视频资料:使用Entity Component System开发<快乐的Minecraft>游戏 使用Unity2018及以上版本才有ECS功能. 本文是看视频的一些摘要. ...
- Unity从实践中学习(1)
首先在实际中unity的开发之中快捷键应该是相当重要的一个部分,这里先引用csdn的一个博客,https://blog.csdn.net/qq_34552886/article/details/697 ...
- Unity ECS 初探
1.安装 安装两个包 2.初探 实例化 注:实例化的实体并不会在Hierarchy视图里面显示,可在EntityDebugger窗口里面显示,因此需要显示的话需要添加Rendermeshcompone ...
- Unity DOTS 走马观花
https://segmentfault.com/a/1190000019143037 本文还在不断完善,可能不会及时同步在 SegmentFault,源文章在我的博客中:萤火之森 - Unity D ...
- 如何抓住ECS的命门,让我们的学习事半功倍
导读 这是一篇老文写与2019年5月 我们说如何提高我们的学习效率,有人说一本书一般只会讲一个知识点,那我们学习ECS 如何抓住学习的重点,提高学习效率.经过本人一段时间的学习总结,总于找到了一个便捷 ...
- 【ShaderToy】开篇
写在前面 呜呼,好久没有写博客了,好惭愧.题外话,感觉越大就越想家,希望可以一直和家人在一起,哪怕只是坐在一起不说话也觉得很温暖,一想到要分开眼睛就开始酸,哎.开学还是爬上来老实更新博客学习吧~ 今天 ...
- (转载) android项目大全,总有你所需的
目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选 程序员8月书讯 项目管理+代码托管+文档协作,开发更流畅 [置顶] android项目大全,总有你所需的 标签: 源 ...
- 是什么在阻止我们学习unity2019?
背景 时过境迁,这是一篇老文,写于2019年5月. 在学习最新的unity ecs过程中,以及学习最新的effect 时,在迈出第一步的时候即遭遇一些困难(学习和测试环境搭建不起来,有时候真的很无语) ...
- 解读GitHub EntityComponentSystemSamples
出自Unity官方的ECS项目示例,该项目的第一次Commit是在2018年3月20号,距离现在一年半的时间,这期间ECS本身的生态在快速发展,稳定性也是逐步提升,期待在2020年的Unity版本中作 ...
随机推荐
- Excel只想显示一部分日期,怎样把其余部分隐藏起来?
问题:只想显示一部分日期,怎样把其余部分隐藏起来? 方法:分列 Step1:选中需要修改的单元格——数据——分列. Step2:固定宽度——点击下一步. Step3:在建立分列处单击鼠标(若想取消 ...
- 厉害了!除了find命令,还有这么多文件查找命令,高手必备!
大家好,我是良许. 在系统里查找文件,是所有工程师都必备的技能(不管你用的是 Windows .Linux.还是 MacOS 系统).对于 Linux 操作系统,单单一个 find 命令就可以完成非常 ...
- 读Linux高性能服务器编程-12章http服务器源码
title:用线程池实现的http服务器 从main函数看起 解析ip地址(点分制, 端口号) 设置忽略SIGPIPE信号 初始化线程池,池中创建了8个线程,每个线程对应一个work函数 初始化htt ...
- git 提交流程
Git提交流程: 1. Menu remote > (拉取)fetch 2. 重新扫描(rescan) 3. 缓存改动(stage change) 4. 写注释后提交(commit) 5. Me ...
- WeChair项目Beta冲刺(1/10)
团队项目进行情况 1.昨日进展 Beta冲刺第一天 前期进展: 对代码进行优化,完成上阶段冲刺未完成的实名认证上传图片的功能,解决解密存在部分失败的bug问题 2.今日安排 前端:设计扫码占座功 ...
- 算法题解:最小的K个数(海量数据Top K问题)
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 题目 输入 n ...
- java scoket aIO 通信
AsynchronousServerSocketChannel assc.accept(this, new ServerCompletionHandler()); 第一个参数是服务器的处理类,第二个参 ...
- 前后端分层架构MVC&MVVM
早期 特点 页面由 JSP.PHP 等工程师在服务端生成 JSP 里揉杂大量业务代码 浏览器负责展现,服务端给什么就展现什么,展现的控制在 Web Server 层 优点 简单明快,本地起一个 Tom ...
- SpringBoot--异常统一处理
先上代码,不捕获异常和手动捕获异常处理: @GetMapping("/error1") public String error1() { int i = 10 / 0; retur ...
- MongoDB快速入门教程 (4.1)
4.Mongoose使用 4.1.nodejs操作mongodb 文档地址:http://mongodb.github.io/node-mongodb-native/3.2/tutorials/cru ...