아카이브는 .zip 파일과 유사하게 모든 타입의 파일을 저장할 수 있는 일반적인 패키징 포맷입니다.
Unity는 아카이브를 콘텐츠 네임스페이스 내의 마운트 포인트에 로드합니다.Unity에서 파일을 마운트하면 애플리케이션은 Unity의 가상 파일 시스템을 사용하는 모든 Unity 시스템을 통해 아카이브 내부의 파일에 액세스할 수 있습니다.AsyncReadManager를 사용하여 가상 파일 시스템에 직접 액세스하십시오.
다음 예시는 ContentBuildInterface.ArchiveAndCompress 함수로 아카이브를 생성하고 ArchiveFileInterface.MountAsync 함수로 아카이브를 마운트하는 방법을 설명합니다.이 예시에서는 LZ4 압축을 사용하고 하나의 텍스트 파일을 포함하는 아카이브를 생성합니다.
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.fileAlias = "file1.txt";
rf.fileName = "Assets/file1.txt";
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();
rHandle.Dispose();
UnsafeUtility.Free(cmd.Buffer, Unity.Collections.Allocator.Temp);
cmds.Dipose():
}
# endif
}