// Construct Shared Array For Serveral Entities protected override void OnUpdate() { // 读取数据并存储在 BlobAsset 中 gmBlobRefs = new List <BlobAssetReference <GroundMotionBlobAsset> >(); // 获得所有可选 GroundMotion 的名字 var gms = GmDataReader.GroundMotionFolders(groundMotionPath); foreach (var item in gms) { //FIXME: Debug 运行了两次,表示读取了两次数据? 可能有问题代码 //Debug.Log(item); if (!GetData(item)) { break; } // 创建 BlobBuilder,赋值 gmArray 和 gmName BlobBuilder blobBuilder = new BlobBuilder(Allocator.Temp); // Blob 声明资产类型 ref GroundMotionBlobAsset groundMotionBlobAsset = ref blobBuilder.ConstructRoot <GroundMotionBlobAsset>(); BlobBuilderArray <GroundMotion> gmArray = blobBuilder.Allocate(ref groundMotionBlobAsset.gmArray, acc.Count); // 存储加速度数据为 BlobArray // TODO: 也许有新的数据转换方式从 List<Vector3> 到 BlobBuilderArray<GroundMotion> for (int i = 0; i < acc.Count; ++i) { gmArray[i] = new GroundMotion { acceleration = new float3(acc[i]) }; } // 存储相应地震名字为 BlobString blobBuilder.AllocateString(ref groundMotionBlobAsset.gmName, item); // 声明 Blob 资产引用 BlobAssetReference <GroundMotionBlobAsset> groundMotionBlobAssetReference = blobBuilder.CreateBlobAssetReference <GroundMotionBlobAsset>(Allocator.Persistent); gmBlobRefs.Add(groundMotionBlobAssetReference); // 释放 BlobBuilder blobBuilder.Dispose(); }