Unity DOTS1.0 入门(7) BlobAsset 核心机制概述

BlobAsset

概述:

  1. Blob Asset是一种特殊的数据结构,用于存储不可变的、只读的、大量的数据。Blob是Binary Large Object的缩写,意为二进制大对象。
  2. Blob Asset的主要特点是它们是不可变的,并且可以在内存中任意移动,这使得它们非常适合用于存储大量的只读数据,例如网格数据、动画数据、声音数据等。
  3. Blob Asset的另一个重要特性是它们可以被多个实体共享。例如,如果你有一个网格数据,你可以将这个数据存储在一个Blob Asset中,然后让所有需要这个网格的实体都引用这个Blob Asset。这样可以避免数据的重复存储,节省内存。

特性说明:

  1. BlobAsset是一个不可以被改变的二进制数据;
  2. 这意味着并发处理的时候使用它们访问它们是安全的;
  3. 它里面的数据类型是被限制为非托管类型,所以兼容burst compiler。
  4. 因为是非托管类型,所以BlobAsest 序列化/反序列性能要比其他格式的数据快得多;
  5. Blob Assets可以被entity里面的组件ComponentData引用;

支持的类型

  1. BlobAsset不能存放托管类型的数据: string , array等其它的托管的物体对象;
  2. BlobAsset只能存放值类型的数据,如: int ,float, double,
  3. BlobAsset不能使用内部指针;
  4. 除了值类型以外BlobAsset支持其它的三种特殊的类型: BlobArray,BlobPtr, BlobString

使用的交互方式

  1. 必须使用BlobBuilder类型才能创建一个BlobAsset 创建一个BlobBuilder对象,因为BlobBuilder会计算相对偏移量;===>把数据build —> blobAsset—>BlobBuilder来处理
  2. 你必须使用ref关键字或BlobAssetReference,通过引用访问和传递blob asset。这确保了blob asset内的任何相对偏移仍然解析到正确的绝对地址。这是因为blob asset中的数据必须是可重定位的。Blob asset可以作为一个整体在内存中重新定位,但是通过值而不是通过引用访问它们并不能保证整个blob资产被复制。

BlobAsset 使用分析

创建与使用一个BlobAsset步骤:

创建和使用一个BlobAsset的步骤如下:

  1. 创建一个BlobBuilder实例。BlobBuilder是一个用于创建BlobAsset的工具类,它会帮助你计算和设置数据的相对偏移量。
Allocator allocator = Allocator.Temp;
BlobBuilder blobBuilder = new BlobBuilder(allocator);
  1. 使用BlobBuilder的Root属性来获取一个BlobBuilder的引用,然后使用这个引用来添加数据。
ref MyBlobAssetData blobAssetData = ref blobBuilder.ConstructRoot<MyBlobAssetData>();
blobAssetData.MyInt = 123;
blobAssetData.MyFloat = 456.789f;
  1. 如果你需要添加一个数组,你可以使用BlobBuilder的Allocate方法来分配内存,并返回一个BlobArray的引用,然后你可以使用这个引用来添加数据。
BlobBuilderArray<float> blobArray = blobBuilder.Allocate(ref blobAssetData.MyArray, 10);
for (int i = 0; i < blobArray.Length; i++)
{
   
    blobArray[i] = i;
}
  1. 使用BlobBuilder的CreateBlobAssetReference方法来创建一个BlobAssetReference,这个方法会返回一个BlobAssetReference,你可以使用这个BlobAssetReference来访问BlobAsset的数据。
BlobAssetReference<MyBlobAssetData> blobAssetReference = blobBuilder.CreateBlobAssetReference<MyBlobAssetData>(allocator);
  1. 最后,不要忘记释放BlobBuilder,因为BlobBuilder是使用Allocator创建的,所以在不再需要它的时候,你需要手动释放它。
blobBuilder.Dispose();
  1. 使用BlobAssetReference的Value属性来访问BlobAsset的数据。
Debug.Log(blobAssetReference.Value.MyInt);
Debug.Log(blobAssetReference.Va
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值