내가 Asset Store 게시 프로세스를 가속화하는 방법
Source: Dev.to
번역을 진행하려면 번역하고자 하는 전체 텍스트를 제공해 주세요. 텍스트를 주시면 요청하신 대로 한국어로 번역해 드리겠습니다.
The Problem: Waiting on Unity
전통적인 .unitypackage 생성 방법은 Unity Editor와 Asset Store Publisher 도구를 이용하는 것입니다. 작동은 하지만, 많은 대기 시간이 필요합니다.
- Unity가 프로젝트를 시작하고 준비하는 데 몇 분이 걸릴 수 있습니다.
- 그 후에 에셋을 새로 고치고, 스크립트를 다시 컴파일한 뒤, 마침내 내보내기 창을 열 수 있습니다.
- 그때서야 에셋을 선택하고 패키지를 만들 수 있습니다.
자주 업데이트를 배포하거나 여러 에셋을 관리한다면, 이 대기 시간이 빠르게 누적됩니다. 저는 실제로 에셋을 개선하기보다 Unity를 기다리는 데 더 많은 시간을 쓰고 있다는 것을 깨달았습니다.
더 빠른 접근법: 자동 패키징
Unity 에디터에 의존하는 대신, Unity 패키지가 어떻게 만들어지는지 분석하고 그 과정을 자동화했습니다. 이 도구는 명령줄에서 실행되며 완전히 스크립트화할 수 있습니다.
프로세스 비교
| 단계 | Unity 에디터 | 자동화 |
|---|---|---|
| 시작‑업 | 3 분 | – |
| 컴파일 | 1 분 | – |
| 패키징 | 1 분 | 10 초 |
| 총합 | 5 분 | 10 초 |
Unity에서는 작은 변경이라도 여러 분이 걸려 패키지를 만들 수 있습니다. 자동화된 접근법을 사용하면 동일한 작업이 약 10 초만에 완료됩니다. 에디터 시작, 스크립트 컴파일, UI 상호작용이 전혀 없습니다. 모든 것이 자동화되었기 때문에 프로세스가 신뢰할 수 있고 빌드 서버나 CI 파이프라인에 쉽게 통합됩니다. 이 워크플로우로 전환한 이후로 패키징은 더 이상 계획을 세워야 할 일이 아니라, 그냥 자동으로 이루어집니다.
.unitypackage이란 실제로 무엇일까?
.unitypackage 파일은 본질적으로 gzipped tarball(.tar.gz)이며, 매우 특정한 구조를 가진 압축 아카이브입니다.
.unitypackage를 풀어보면 Assets/Scripts/Player.cs와 같은 폴더는 보이지 않습니다. 대신 Unity GUID를 이름으로 갖는 폴더 목록이 나타나며, 각 GUID는 하나의 에셋을 나타냅니다.
root/
├── [GUID_1]/
│ ├── asset
│ ├── asset.meta
│ └── pathname
├── [GUID_2]/
│ ├── asset
│ ├── asset.meta
│ └── pathname
└── …
각 폴더에 포함된 내용
asset– 에셋의 원시 바이너리 또는 텍스트 데이터asset.meta– Unity가 가져오기 설정 및 레퍼런스에 사용하는 메타데이터pathname– 에셋을 가져올 때 Unity가 해당 에셋을 어디에 배치해야 하는지 알려주는 텍스트 파일
Unity가 패키지를 가져올 때, 이 데이터를 읽어 원래의 폴더 구조를 재구성합니다. 포맷만 올바르면, 패키지가 어떻게 생성되었는지는 Unity가 신경 쓰지 않습니다.
Source: …
패킹 프로세스: 올바른 에셋 찾기
패키징은 단순히 파일을 복사하는 것이 아닙니다. Unity 에셋은 서로 강하게 연결되어 있으며, 의존성을 놓치면 패키지가 쉽게 깨질 수 있습니다.
에셋 탐색
- 포함해야 할 에셋을 찾아냅니다(예: 폴더나
Assets/MyTool같은 패턴). - 각 에셋마다
.meta파일이 있는지 확인합니다—Unity는 메타 파일을 통해 GUID를 할당하고 추적합니다.
GUID는 메타 파일 상단에 정의됩니다:
guid: a1b2c3d4e5f6...
모든 GUID를 수집하여 폴더 구조를 구축하고, 이후 의존성 분석 시 매칭합니다.
의존성 분석
많은 Unity 에셋(프리팹, 머티리얼, 씬 등)은 YAML 텍스트 파일로 저장됩니다. 이 파일들 안에서 참조는 fileID‑GUID 쌍 형태로 나타납니다. 예:
fileID: 123456, guid: a1b2c3d4e5f6...
이를 효율적으로 찾기 위해 정규식을 사용합니다:
var regex = new Regex(@"fileID: ([\-0-9]+), guid: ([a-z0-9]+)", RegexOptions.Compiled);
*RegexOptions.Compiled*는 패턴을 MSIL 코드로 컴파일하여, 초기화 비용은 있지만 실행 시 매우 빠른 성능을 제공합니다. 자주 사용할 경우 컴파일된 정규식이 크게 빠릅니다.
각 참조된 GUID는 .meta 파일에 정의된 GUID와 매칭됩니다.
패키징
분석이 끝나면 의존성 그래프를 구축합니다. 직접이든 간접이든 참조되는 모든 에셋은 자동으로 패키지에 포함됩니다. 이렇게 하면 프리팹이 머티리얼을 유지하고, 스크립트가 의존성을 유지하며, 패키지가 바로 사용할 수 있게 됩니다.
실제 패킹 단계는 간단합니다:
- 발견된 모든 GUID를 순회합니다.
- 각 GUID마다 디렉터리를 생성합니다.
- 필요한
asset,asset.meta,pathname파일을 추가합니다. - 전체 구조를 Gzip으로 압축합니다.
결과 아카이브 레이아웃:
root/
├── [GUID_1]/
│ ├── asset
│ ├── asset.meta
│ └── pathname
├── [GUID_2]/
│ ├── asset
│ ├── asset.meta
│ └── pathname
└── …
얼마나 시간을 절약했나요
출판 과정을 90 % 이상 단축했습니다.
저는 주로 사이버 보안 솔루션을 포함한 다양한 자산을 제작합니다.
예를 들어, 제 Obfuscator는 Unity 2021, 2023, 그리고 6000—세 가지 Unity 버전용으로 출시됩니다. 각 버전마다 Free, Pro, Source의 세 가지 티어가 있어 총 9개의 업로드가 필요합니다.
Unity 에디터를 사용하면 각 패키지를 만드는 데 약 5 분이 걸립니다. 자동화 도구를 사용하면 각 패키지를 ≈10 초 만에 준비할 수 있어, 45분이 걸리던 수작업을 몇 초 안에 끝낼 수 있습니다.
TL;DR
- Unity 패키지는 GUID‑이름 폴더를 gzip으로 압축한 tarball에 불과합니다.
.meta파일과 YAML 자산 파일을 파싱하면 필요한 모든 GUID를 찾아낼 수 있습니다.- 작은 커맨드‑라인 도구로 올바른 폴더 구조를 만들고 몇 초 만에 gzip으로 압축하면, 패키징을 위해 Unity 에디터를 실행할 필요가 사라집니다.
한 번 시도해 보고 Unity를 기다리는 시간을 되찾으세요!
결과: 전체 45 분 정도가 소요되었습니다. 제가 설명한 자동화 프로세스를 사용하면 전체 워크플로를 약 30 초 정도로 줄일 수 있습니다.
PowerShell 스크립트
# Export-UnityPackages.ps1
param (
[Parameter(Mandatory = $true)]
[string]$OutputDirectory,
[Parameter(Mandatory = $true)]
[string[]]$Versions
)
# Ensure output directory exists
if (!(Test-Path $OutputDirectory)) {
New-Item -ItemType Directory -Path $OutputDirectory | Out-Null
}
foreach ($version in $Versions) {
$sourcePath = "..\$version"
$outputPackage = Join-Path $OutputDirectory "$version.unitypackage"
Write-Host "Exporting Unity package for version $version..."
dotnet UnityPackageExporter.dll `
$sourcePath `
$outputPackage `
--assets "Assets/MyTool/**.*" `
--skip-dependency-check
}
스크립트를 실행합니다:
.\Export-UnityPackages.ps1 -OutputDirectory "..\packed" -Versions "1.0.0","1.1.0","2.0.0"
결과:
packed/
├─ 1.0.0.unitypackage
├─ 1.1.0.unitypackage
└─ 2.0.0.unitypackage
직접 시도해 보세요
Unity용 에셋을 제작한다면, 패키징이 워크플로우에서 가장 오래 걸리는 단계가 되어서는 안 됩니다. Unity 에디터를 완전히 건너뛰면 에셋 내보내기가 빠르고, 반복 가능하며 자동화하기 쉬워집니다.
제가 만든 도구는 무료이며, 오픈소스이고, MIT‑라이선스를 갖고 있습니다. 직접 사용해 보고, 작동 방식을 살펴보거나 필요에 맞게 수정할 수 있습니다.
👉 자세히 알아보고 여기서 직접 사용해 보세요:
https://www.guardingpearsoftware.com/tool/package-export
이 도구가 Unity를 기다리는 시간을 줄이고 훌륭한 에셋을 만드는 데 더 많은 시간을 할애하는 데 도움이 되길 바랍니다.
제 블로그에서 더 읽어보세요: www.guardingpearsoftware.com