Version: 2022.3
언어: 한국어
로컬 에셋 패키지 임포트
ContentNamespaces

아카이브

아카이브는 .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
}
로컬 에셋 패키지 임포트
ContentNamespaces