【Unity DOTS1.0】学习之路---基础课11-13笔记

DynamicBufferComponent:非托管内存下可以随意调整大小的数组,默认容量为128字节,每个元素默认大小为16字节(float4类型),也就是默认容量为8个元素。其继承接口为IBufferElementData
DynamicBuffer默认是存储在一段连续的trunk中,如果默认大小需要扩充,则会移动到另外一个trunk中,原始的会被销毁。
在这里插入图片描述

DynamicBuffer的使用事项
添加,移除均可以使用AddComponent和RemoveComponent,但是检索或获得DynamicBuffer我们需要使用GetBuffer而不是GetComponent。
在这里插入图片描述

因为DynamicBuffer是只指向初始Trunk,当一个Entity添加或者移除Component时,它所属的Trunk就会发生改变,但是原来的DynamicBuffer指向是不变的。
在这里插入图片描述

在这里插入图片描述

ECB.AddBuffer将返回一个可写的Buffer,拷贝至ECB的Playblack中,SetBuffer同理,而AppendBuffer则是在Playblack所指的Buffer尾部添加值
在这里插入图片描述

==============================================================================================

Enableable Component:用来在Runing时启用或者禁用对象上的某个组件,用于处理频繁修改组件的情况。(优化了1.0之前频繁操作Add和Remove导致的Structural Change)
在这里插入图片描述
在这里插入图片描述

==============================================================================================

Shared Component:首先第一点,Shared Component一般都存储在Chunk之外,然后通过每一个chunk的句柄对应Shared值,这样设计的话,可以使得不同的Chunk,也就是不同的Entity的组件集合可以对应一个Shared Value。如果我们将Shared Value进行更改,并且跟改后Shared Value是存在于当前Shared ComponentDataArray中,那么Entity对应的Chunk会相应进行移动,如下图:
在这里插入图片描述

但是如果是下面的情况,也就是Value值的改变是新值,那么则是添加到新的Chunk中,同时也同样引起了Structual Change,这两种情况应该要避免。
在这里插入图片描述

在这里插入图片描述
第三点我想着重解读一下,假设有两种共享组件,那么某一个实体的chunk可以拥有共享组件1,共享组件2,共享组件1和2一共三种情况,那么至少就有三种Chunk的可能,也就导致了Archetype有三种可能,即碎片化(个人理解,可能不大对?)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值