Unity 6.3
0 онлайн 8 гостей 3 в системе
Вход

AsyncReadManager.Read

Declaration

public static Unity.IO.LowLevel.Unsafe.ReadHandle Read(string filename, ReadCommand* readCmds, uint readCmdCount, string assetName, ulong typeID, Unity.IO.LowLevel.Unsafe.AssetLoadingSubsystem subsystem);

Параметры

Параметр Описание
имя файла Имя файла для чтения.
readCmds Указатель на массив структур ReadCommand, которые указывают смещение, размер и буфер назначения.
readCmdCount Количество команд чтения, на которые указывает readCmds.
assetName (Необязательно) Имя считываемого объекта для целей метрики.
typeID (Необязательно) TypeID считываемого объекта для целей метрики.
подсистема (Необязательно) Тег Подсистемы для операции чтения, для целей метрики.

Возвращаемое значение

ReadHandle Используется для мониторинга прогресса и состояния команды read.

Описание

Выпускает асинхронную операцию чтения файла. Возвращает ReadHandle.

Можно установить параметры assetName, typeIdи subsystem для сбора показателей, специфических для ассета, для этой операции чтения. При включении сбора показателей с помощью ,AsyncReadManagerMetrics.StartCollectingMetrics,, Unity включает эту информацию в ,AsyncReadManagerMetrics,, что позволяет анализировать влияние различных типов ассетов на производительность.

AsyncReadManager копирует данные, на которые ссылается /readCmds/; вы можете удалить или освободить данные сразу же после вызова Read.

using System.IO;
using Unity.Collections;
using Unity.IO.LowLevel.Unsafe;
using Unity.Collections.LowLevel.Unsafe;
using UnityEngine;

class AsyncReadSample : MonoBehaviour { private ReadHandle readHandle; NativeArray<ReadCommand> cmds; string assetName = "myfile"; ulong typeID = 114; // from ClassIDReference AssetLoadingSubsystem subsystem = AssetLoadingSubsystem.Scripts;

public unsafe void Start() { string filePath = Path.Combine(Application.streamingAssetsPath, "myfile.bin"); cmds = new NativeArray<ReadCommand>(1, Allocator.Persistent); ReadCommand cmd; cmd.Offset = 0; cmd.Size = 1024; cmd.Buffer = (byte*)UnsafeUtility.Malloc(cmd.Size, 16, Allocator.Persistent); cmds[0] = cmd; readHandle = AsyncReadManager.Read(filePath, (ReadCommand*)cmds.GetUnsafePtr(), 1, assetName, typeID, subsystem); }

public unsafe void Update() { if (readHandle.IsValid() && readHandle.Status != ReadStatus.InProgress) { Debug.LogFormat("Read {0}", readHandle.Status == ReadStatus.Complete ? "Successful" : "Failed"); readHandle.Dispose(); UnsafeUtility.Free(cmds[0].Buffer, Allocator.Persistent); cmds.Dispose(); } } }

Declaration

public static Unity.IO.LowLevel.Unsafe.ReadHandle Read(ref Unity.IO.LowLevel.Unsafe.FileHandle fileHandle, Unity.IO.LowLevel.Unsafe.ReadCommandArray readCmdArray);

Параметры

Параметр Описание
fileHandle FileHandle для чтения, открытый AsyncReadManager.OpenFileAsync.
readCmdArray Структура с командами чтения, которые нужно поставить в очередь.

Возвращаемое значение

ReadHandle Объект ReadHandle, который можно использовать для проверки состояния и мониторинга прогресса операций чтения.

Описание

Очереди набор операций чтения для файла, открытого с OpenFileAsync.

Эта функция делает копию ReadCommandArray структуру, переданную параметром, внутренне, поэтому поддерживать массив самостоятельно не нужно. Примечание: WebGL сборки не поддерживают использование AsyncReadManager для открытия файлов с удаленного веб-сервера; например, из пути Application.streamingAssetsPath который сопоставляется с URL на удаленном веб-сервере.

using System.IO;
using Unity.Collections;
using Unity.IO.LowLevel.Unsafe;
using Unity.Collections.LowLevel.Unsafe;
using UnityEngine;
using Unity.Jobs;

class AsyncReadSample : MonoBehaviour { static string TestFilename = Path.Combine(Application.streamingAssetsPath, "myfile.bin");

public unsafe void Start() { ReadCommand cmd; cmd.Offset = 0; cmd.Size = 1024; cmd.Buffer = (byte*)UnsafeUtility.Malloc(cmd.Size, 16, Allocator.Persistent);

FileHandle fileHandle = AsyncReadManager.OpenFileAsync(TestFilename);

ReadCommandArray readCmdArray; readCmdArray.ReadCommands = &cmd; readCmdArray.CommandCount = 1;

ReadHandle readHandle = AsyncReadManager.Read(fileHandle, readCmdArray);

JobHandle closeJob = fileHandle.Close(readHandle.JobHandle);

closeJob.Complete();

// ... Use the data read into the buffer

readHandle.Dispose();

for (int i = 0; i < readCmdArray.CommandCount; i++) UnsafeUtility.Free(readCmdArray.ReadCommands[i].Buffer, Allocator.Persistent); } }