Unity DOTS系列之BlobAsset核心机制分析

本文介绍了UnityDOTS中的BlobAsset机制,包括其原理、特点(不可变、非托管、性能优化),以及如何通过BlobBuilder创建和使用BlobAsset,特别提到了BlobArray和BlobPtr的用法。

最近DOTS发布了正式的版本, 我们来分享一下DOTS里面BlobAsset机制,方便大家上手学习掌握Unity DOTS开发。

BlobAsset 概叙

DOTS提供了BlobAsset机制来把数据生成高效的二进制数据。BlobAsset的数据是不可变的。BlobAsset只支持非托管类型数据。支持Burst编译器编译出来的类型。同时它只存储非托管类型的数据,这样使得它序列化与反序列化的性能与效率非常的块。BlobAsset也可以被entity种的component使用。

   BlobAsset不支持如:数组, string等其它的托管对象(垃圾回收器可以回收的为托管对象),而且运行的时候不允许改变里面的数据内容。BlobAsset为了更快的加载,他只会包含传值的类型,不能包含对内部的引用与内部指针。BlobAsset除了支持标准的值类型(float, int等)以外它还支持三种特殊的类型: BlobArray, BlobPtr, BlobString。如果BlobAsest包含内部指针,编译器会报错。使用BlobAsset主要注意以下几个方面:

  A: 创建一个BlobAsset,你需要先生成一个BlobBuilder,来帮助你处理计算每个数据在内存种的偏移;

  B: 当你要使用一个BlobAsset的时候你需要使用ref BlobAssetReference, 来访问BlobAsset种的数据,这样访问数据的时候是基于BlobAsset内部引用的不会有值的copy;

总结:使用BlobBuilder来生成BlobAsset,基于BlobAssetReference来高效访问里面的数据。  

BlobAsset的创建与使用

创建一个BlobAsset,按照以下步骤来进行处理即可:

  step1: 创建一个BlobBuilder,它内部也会分配一些内存出来;

  step2: 使用BlobBuilder.ContructRoot 函数来构建一个root blobasset出来。

  Step3: 把数据填写到blobasset种,保存起来;

  Step4: 使用BlobBuilder.CreateBlobAssetReference来创建一个BlobAssetReference来方便读取与使用Blobasset种的数据;

  Step5: 把BlobBuilder对象释放掉。

BlobBuilder构造出BlobAsset,并把数据存入进去,然后再生成BlobAssetReference<T>来给用户操作数据。参考代码如下:

如果你要存数组到BlobAsset,可以使用BlobArray来处理。数组数据内部基于索引的偏移来进行每个元素的定位。将数组存入到BlobAsset的代码如下:

存储BlobPtr数据到BlobAsset,代码如下:

这里的BlobPtr是基于数据的偏移来存储的;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值