Unity 아카이브 및 마운트 기능 안내
이 문서는 Unity의 아카이브 생성 및 마운트 기능에 대해 설명합니다. Unity는 아카이브를 사용하여 다양한 파일을 패키징하고, 이를 애플리케이션에서 쉽게 사용할 수 있도록 합니다.
아카이브란?
아카이브는 여러 파일을 하나로 묶는 패키징 포맷으로, .zip 파일과 유사합니다. Unity에서는 이를 통해 콘텐츠를 관리하고 접근할 수 있습니다. 아카이브 파일은 Unity의 가상 파일 시스템에 마운트되어 사용됩니다.
아카이브 생성 및 마운트
아카이브를 생성하고 마운트하는 방법은 다음과 같습니다.
- 아카이브 생성:
ContentBuildInterface.ArchiveAndCompress함수를 사용하여 아카이브를 생성합니다. - 아카이브 마운트:
ArchiveFileInterface.MountAsync함수를 사용하여 아카이브를 마운트합니다.
아래의 C# 코드 예시는 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.Dispose();
}
# endif
}
활용 및 응용 예제
아카이브와 마운트 기능을 활용한 다양한 예제를 소개합니다.
| 예제 제목 | 설명 |
|---|---|
| 다수의 파일 처리 | 여러 개의 텍스트 및 이미지 파일을 포함하는 아카이브를 생성하여 다양한 콘텐츠를 한 번에 관리할 수 있습니다. |
| 리소스 로딩 최적화 | 필요한 리소스만을 아카이브에서 로드하여 메모리 사용을 최적화하는 방법을 구현할 수 있습니다. |
| 동적 콘텐츠 | 게임 내에서 동적으로 아카이브를 생성하고 추가 콘텐츠를 다운로드하여 사용자에게 배포할 수 있습니다. |
| 버전 관리 | 콘텐츠의 버전 관리 시스템을 구축하여, 아카이브의 특정 버전만을 사용하면서 업데이트를 진행할 수 있습니다. |
| 플랫폼 별 최적화 | 플랫폼별로 특화된 아카이브를 생성하여 서로 다른 기기에서 최적의 성능을 보장할 수 있습니다. |
결론
Unity의 아카이브 및 마운트 기능은 애플리케이션의 콘텐츠를 효율적으로 관리하고 더 나은 사용자 경험을 제공합니다. 위의 예제들을 통해 다양한 방법으로 이 기능을 활용해 보세요.