Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Объявление

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

Параметры

filename Имя файла для чтения.
readCmds Указатель на массив структур ReadCommand, которые определяют смещение, размер и целевой буфер.
readCmdCount Количество команд чтения, на которое указывает readCmds.
assetName (Необязательно) Имя считываемого объекта для целей метрики.
typeID (Необязательно) TypeID считываемого объекта для целей метрики..
subsystem (Optional) The Subsystem tag for the read operation, for metrics purposes.

Возвращает

ReadHandle Используется для отслеживания хода выполнения и состояния команды чтения.

Описание

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

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

AsyncReadManager копирует данные, на которые ссылается функция Read; вы можете удалить или освободить данные сразу после вызова 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 ClassIDReferenceAssetLoadingSubsystem 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(); } } }

Объявление

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, переданной в качестве внутреннего параметра, поэтому вам не нужно поддерживать массив.

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); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3