版本: Unity 6 (6000.0)
语言English
  • C#

AsyncReadManager.Read

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每个建议更改,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

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 (可选)读取操作的子系统标签,用于指标目的。

返回值

ReadHandle 用于监控读取命令的进度和状态。

描述

发出异步文件读取操作。返回一个 ReadHandle。

您可以设置assetNametypeIdsubsystem 参数来收集此读取操作的特定于资产的指标。当您使用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 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(); } } }

参数

fileHandle 要从中读取的文件句柄,由AsyncReadManager.OpenFileAsync打开。
readCmdArray 包含要排队的读取命令的结构体。

返回值

ReadHandle 一个ReadHandle 对象,您可以使用它来检查状态并监控读取操作的进度。

描述

为使用OpenFileAsync打开的文件排队一组读取操作。

此函数在内部复制作为参数传递的ReadCommandArray 结构体,因此您无需维护该数组。注意:WebGL 构建不支持使用AsyncReadManager从远程 Web 服务器打开文件;例如,从路径Application.streamingAssetsPath映射到远程 Web 服务器上的 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); } }