首页 > 其他分享 >Unity DOTS系列之BlobAsset核心机制分析

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

时间:2023-10-25 18:13:35浏览次数:37  
标签:DOTS 数据 BlobBuilder BlobAsset Unity 使用 BlobAssetReference

 最近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机制,就给大家分享到这里了,

 

标签:DOTS,数据,BlobBuilder,BlobAsset,Unity,使用,BlobAssetReference
From: https://www.cnblogs.com/rainy1unity/p/17787813.html

相关文章

  • Unity游戏排行榜的制作与优化
    游戏排行榜是一个很重要的功能,在弱联网的单机游戏与网络游戏中排行榜都是非常重要的,今天我们来详细的讲解游戏排行榜的制作方案,主要有4个点:  游戏排行榜排序核心算法的实现 排序在游戏开发中是一种十分重要的算法,特别是对于海量的数据,高效的排序算法,是核心与关键,排行......
  • Unity DOTS系列之Filter Baking Output与Prefab In Baking核心分析
     最近DOTS发布了正式的版本,我们来分享一下DOTS里面Baking核心机制,方便大家上手学习掌握UnityDOTS开发。今天给大家分享的Baking机制中的FilterBakingOutput与PrefabInBaking。FilterBakingOutput机制在默认情况下,Baking会为每个GameObject生成的Entity与Component,......
  • Unity 3D定点数物理引擎实战系列
    1.1 BEPUphysicsint3D定点数物理引擎介绍 帧同步的游戏中如果用物理引擎,为了保证不同设备上的结果一致,需要采用定点数来计算迭代游戏过程中的物理运算。也就是我们通常说的定点数物理引擎(确定性物理引擎)。本系列教程给大家详细的讲解如何在你的项目中内置一个确定性物理引......
  • Unity 3D定点数物理引擎实战系列2
    1.2 BEPUphysicsint定点数3D物理引擎使用上一节給大家介绍了BEPUphysicsint的一些基本的情况,这节课我们来介绍它的基本使用,本节主要从以下5个方面来介绍:(1) 创建一个物理世界Space,并开启模拟迭代;(2) 添加一个物理物体Entity到世界;(3) 物理引擎的基本处理与操作使用;(......
  • Unity ILRuntime 实战教程系列
    1.1 Unity 搭建ILRuntime开发环境 Unity热更新目前主流的方案有; Lua, ILRuntime, puerts, huatuo方案。前两个大家都比较熟悉了,puerts是基于TypeScript开发的热更新,huatuo是基于C#的方案。后两个大家会比较陌生。本系列分享基于ILRuntime来做热更新。 ILRuntime热更......
  • Unity中GameObject对象的方法Find,FindGameObjectsWithTag等API的使用方法
    Unity中GameObject对象的方法Find,FindGameObjectsWithTag等API的使用方法.Find(stringname):.FindGameObjectsWithTag(stringtag):.FindGameObjectWithTag(stringtag):.FindWithTag(stringtag):在Unity中,GameObject类具有一些用于查找和操作游戏对象的方法。.Find(stringna......
  • unity打包 android
    第一种:手动把没有的包都放入C:\ProgramFiles\Unity\Hub\Editor\2022.3.3f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib 第二种:修改镜像urlC:\ProgramFiles\Unity\Hub\Editor\2022.3.3f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools......
  • Unity DOTS系列之Filter Baking Output与Prefab In Baking核心分析
    最近DOTS发布了正式的版本,我们来分享一下DOTS里面Baking核心机制,方便大家上手学习掌握UnityDOTS开发。今天给大家分享的Baking机制中的FilterBakingOutput与PrefabInBaking。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发......
  • Unity 跨平台底层如何处理C#代码
    在面试中,我们经常会被问到Unity的底层是如何处理C#,本节给通过一下3个点来给大家详细的分析这个问题:(1)C#的发展历史;(2)Unity为什么用C#;(3)il2cpp解决了什么问题; 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大......
  • Unity如何搭建游戏框架
    Unity引擎本省就是一个框架,我们基于Unity再做一个游戏开发框架,本质就是建立一种组织自己项目的方式和方法,让程序+美术+策划一起协同工作,同时能开发出满足项目需求的游戏产品。所以游戏框架的架构与设计与项目管理本身有很密切的关系,今天从另外一个维度来说说基于游戏引擎来如何......