unsafe public void ReadWriteBoxedWithStringArrayWithOneElement() { var srcData = new ComponentWithStringArray() { StringArray = new string[] { "One" } }; // Write to stream var buffer = new UnsafeAppendBuffer(0, 16, Allocator.Persistent); var writer = new ManagedObjectBinaryWriter(&buffer); var boxedSrcData = (object)srcData; writer.WriteObject(boxedSrcData); var objectTable = writer.GetUnityObjects(); // Read from stream var readStream = buffer.AsReader(); var reader = new ManagedObjectBinaryReader(&readStream, objectTable); var boxedRead = reader.ReadObject(typeof(ComponentWithStringArray)); // Check same ComponentWithStringArray.AreEqual(srcData, (ComponentWithStringArray)boxedRead); buffer.Dispose(); }
unsafe public void ReadWriteBoxed() { var srcData = ConfigureStruct(); // Write to stream var buffer = new UnsafeAppendBuffer(0, 16, Allocator.Persistent); var writer = new ManagedObjectBinaryWriter(&buffer); var boxedSrcData = (object)srcData; writer.WriteObject(boxedSrcData); var objectTable = writer.GetUnityObjects(); // Read from stream var readStream = buffer.AsReader(); var reader = new ManagedObjectBinaryReader(&readStream, objectTable); var boxedRead = reader.ReadObject(typeof(TestStruct)); // Check same TestStruct.AreEqual(srcData, (TestStruct)boxedRead); buffer.Dispose(); }
public static EntityChangeSet Deserialize(UnsafeAppendBuffer.Reader *bufferReader, NativeArray <RuntimeGlobalObjectId> globalObjectIDs, GlobalAssetObjectResolver resolver) { bufferReader->ReadNext <ComponentTypeHash>(out var typeHashes, Allocator.Persistent); for (int i = 0; i != typeHashes.Length; i++) { var stableTypeHash = typeHashes[i].StableTypeHash; var typeIndex = TypeManager.GetTypeIndexFromStableTypeHash(stableTypeHash); if (typeIndex == -1) { typeHashes.Dispose(); throw new ArgumentException("The LiveLink Patch Type Layout doesn't match the Data Layout of the Components. Please Rebuild the Player."); } } var createdEntityCount = bufferReader->ReadNext <int>(); var destroyedEntityCount = bufferReader->ReadNext <int>(); bufferReader->ReadNext <EntityGuid>(out var entities, Allocator.Persistent); bufferReader->ReadNext <NativeString64>(out var names, Allocator.Persistent); bufferReader->ReadNext <PackedComponent>(out var addComponents, Allocator.Persistent); bufferReader->ReadNext <PackedComponent>(out var removeComponents, Allocator.Persistent); bufferReader->ReadNext <PackedComponentDataChange>(out var setComponents, Allocator.Persistent); bufferReader->ReadNext <byte>(out var componentData, Allocator.Persistent); bufferReader->ReadNext <EntityReferenceChange>(out var entityReferenceChanges, Allocator.Persistent); bufferReader->ReadNext <BlobAssetReferenceChange>(out var blobAssetReferenceChanges, Allocator.Persistent); bufferReader->ReadNext <LinkedEntityGroupChange>(out var linkedEntityGroupAdditions, Allocator.Persistent); bufferReader->ReadNext <LinkedEntityGroupChange>(out var linkedEntityGroupRemovals, Allocator.Persistent); bufferReader->ReadNext <BlobAssetChange>(out var createdBlobAssets, Allocator.Persistent); bufferReader->ReadNext <ulong>(out var destroyedBlobAssets, Allocator.Persistent); bufferReader->ReadNext <byte>(out var blobAssetData, Allocator.Persistent); bufferReader->ReadNext <PackedComponent>(out var setSharedComponentPackedComponents, Allocator.Persistent); var resolvedObjects = new UnityEngine.Object[globalObjectIDs.Length]; resolver.ResolveObjects(globalObjectIDs, resolvedObjects); var reader = new ManagedObjectBinaryReader(bufferReader, resolvedObjects); var setSharedComponents = new PackedSharedComponentDataChange[setSharedComponentPackedComponents.Length]; for (int i = 0; i < setSharedComponentPackedComponents.Length; i++) { object componentValue; if (bufferReader->ReadNext <int>() == 1) { var packedTypeIndex = setSharedComponentPackedComponents[i].PackedTypeIndex; var stableTypeHash = typeHashes[packedTypeIndex].StableTypeHash; var typeIndex = TypeManager.GetTypeIndexFromStableTypeHash(stableTypeHash); var type = TypeManager.GetType(typeIndex); componentValue = reader.ReadObject(type); }
static PackedManagedComponentDataChange[] ReadManagedComponentDataChanges(UnsafeAppendBuffer.Reader *buffer, ManagedObjectBinaryReader reader, NativeArray <ComponentTypeHash> typeHashes) { buffer->ReadNext <PackedComponent>(out var packedComponents, Allocator.Temp); var setManagedComponentDataChanges = new PackedManagedComponentDataChange[packedComponents.Length]; for (var i = 0; i < packedComponents.Length; i++) { var packedTypeIndex = packedComponents[i].PackedTypeIndex; var stableTypeHash = typeHashes[packedTypeIndex].StableTypeHash; var typeIndex = TypeManager.GetTypeIndexFromStableTypeHash(stableTypeHash); var type = TypeManager.GetType(typeIndex); var componentValue = reader.ReadObject(type); setManagedComponentDataChanges[i].Component = packedComponents[i]; setManagedComponentDataChanges[i].BoxedValue = componentValue; } packedComponents.Dispose(); return(setManagedComponentDataChanges); }