ArchiveFileInterface
класс в Unity.IO.Archive
Выполнено в:UnityEngine.CoreModule
Описание
Предоставляет методы управления архивными файлами Unity.
Этот класс предоставляет низкоуровневый интерфейс для управления архивными файлами Unity.
Архивные файлы монтируют в ContentNamespace. После того, как архив будет монтирован, его содержимое может быть доступно с AsyncReadManager или ContentLoadInterface.LoadContentFileAsync.
AssetBundles использует формат архива и может быть загружен с помощью API, но в большинстве случаев предпочтительнее загружать AssetBundles с помощью AssetBundle класс либо через пакет Addressables.
data.unity3d файл генерируется, когда BuildPipeline.BuildPlayer вызывает с BuildOptions.CompressWithLz4 или BuildOptions.CompressWithLz4HC файл архива. В этом случае файл архива ArchiveFileInterface API обычно не требуется, так как содержимое архива автоматически доступно в Проигрывателе.
Дополнительные ресурсы: ContentBuildInterface.ArchiveAndCompress.
// The following example describes how to create an archive with // ContentBuildInterface.ArchiveAndCompress and mount the archive with // ArchiveFileInterface.MountAsync. This example produces an archive that uses LZ4 // compression and contains one text file.
using Unity.Collections.LowLevel.Unsafe; using Unity.Content; using Unity.IO.Archive; using Unity.IO.LowLevel.Unsafe; using UnityEngine; #if UNITY_EDITOR using UnityEditor.Build.Content; #endif
public class SampleBehaviour : MonoBehaviour { #if UNITY_EDITOR unsafe void CreateAndMountArchive() { // Create the Archive ResourceFile[] rFiles = new ResourceFile[1]; ResourceFile rf = new ResourceFile(); rf.fileName = "Assets/file1.txt"; // Path of the existing file, to copy into the Archive rf.fileAlias = "file1.txt"; // Path given to the file inside the Archive rFiles[0] = rf;
string archivePath = System.IO.Path.Combine(Application.streamingAssetsPath, "myArchive"); ContentBuildInterface.ArchiveAndCompress(rFiles, archivePath, UnityEngine.BuildCompression.LZ4);
// Mount the Archive var ns = ContentNamespace.GetOrCreateNamespace("MyNamespace123"); ArchiveHandle ahandle = ArchiveFileInterface.MountAsync(ns, archivePath, "a:"); ahandle.JobHandle.Complete();
string textFilePath = ahandle.GetMountPath() + "file1.txt"; // ns:/MyNamespace123/a:/file1.txt ReadCommand cmd; cmd.Size = 1024; cmd.Buffer = UnsafeUtility.Malloc(cmd.Size, 4, Unity.Collections.Allocator.Temp); cmd.Offset = 0; NativeArray<ReadCommand> cmds = new NativeArray<ReadCommand>(1, Allocator.Persistent); cmds[0] = cmd;
ReadHandle rHandle = AsyncReadManager.Read(textFilePath, (ReadCommand*)cmds.GetUnsafePtr(), 1); rHandle.JobHandle.Complete();
// ...At this point cmd.Buffer contains contents from file1.txt (up to 1024 bytes)...
rHandle.Dispose(); UnsafeUtility.Free(cmd.Buffer, Unity.Collections.Allocator.Temp); cmds.Dipose():
ahandle.Unmount().Complete(); } #endif }
Статические методы
| Метод | Описание |
|---|---|
| GetMountedArchives | Получает все подключенные архивы. |
| MountAsync | Загружает все файлы в архиве в точку монтирования. |