์„œ๋น„์Šค
๊ต์œก ์ฒ ํ•™

Resource Building Pipeline

Abstract

๐Ÿ“Œ
"์–ด๋–ค ์—์…‹์„ ์–ด๋А ๋ฌถ์Œ์— ๋„ฃ๊ณ , ์–ด๋–ป๊ฒŒ ๋นŒ๋“œํ•ด์„œ ๋‚ด๋ณด๋‚ด๋Š”๊ฐ€"๊ฐ€ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ผ์ž…๋‹ˆ๋‹ค. ์ด ์—๋””์…˜์—์„œ ๊ทธ ๋‹ต์€ ์ „๋ถ€ Addressables Groups ์ฐฝ์— ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋Ÿฐํƒ€์ž„ ์ฝ”๋“œ๋งŒ ๋Œ€์‹ ํ•˜๊ณ , ์—์…‹์„ ๋“ฑ๋กํ•˜๊ณ  ๋ฌถ๊ณ  ๋นŒ๋“œํ•˜๋Š” ์ผ์€ ์ด ์ฐฝ์—์„œ ์ง์ ‘ ํ•ฉ๋‹ˆ๋‹ค.
์‹ค๋ฌด์—์„œ ํ•„์š”ํ•œ ์ˆœ๊ฐ„
โ€ข
์ƒˆ ์—์…‹์„ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ ๊ฒŒ์ž„์—์„œ ๋กœ๋“œ๋˜์ง€ ์•Š์„ ๋•Œ
โ€ข
์—๋””ํ„ฐ์—์„œ๋Š” ๋˜๋Š”๋ฐ ๋นŒ๋“œํ•œ ๊ฒŒ์ž„์—์„œ ์—์…‹์ด ์•ˆ ๋œฐ ๋•Œ
โ€ข
์•ฑ ์šฉ๋Ÿ‰์ด๋‚˜ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์ค„์ด๋ ค๊ณ  ๋ฌถ์Œ์„ ๋‚˜๋ˆŒ ๋•Œ
ToyboxNightmare ์—์„œ๋Š”
Prefabs ๊ทธ๋ฃน ํ•˜๋‚˜์— 25๊ฐœ๊ฐ€ ๋“ค์–ด ์žˆ๊ณ , ํ•œ ๋ฒˆ๋“ค๋กœ ๋ฌถ์ž…๋‹ˆ๋‹ค(Pack Together) โ€” ์บ๋ฆญํ„ฐ 2(Girl, Boy), ์  5(Zombunny, ZomBear, Hellephant, Clown, ZombieDuck), ์•„๊ตฐ 2(Sheep, Dog), ํˆฌ์‚ฌ์ฒดยทํ”ผ๊ฒฉ ์ดํŽ™ํŠธ 5, UI ํผ 2(HUDForm, PauseMenuForm), ์‚ฌ์šด๋“œ ํด๋ฆฝ 8, ๋ฐฐ๊ฒฝ Environment. ์ „๋ถ€ ์•ฑ ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” Local ๊ทธ๋ฃน์ž…๋‹ˆ๋‹ค.

Groups ์ฐฝ

Window โ†’ Asset Management โ†’ Addressables โ†’ Groups
์œ„์น˜
ํ•˜๋Š” ์ผ
๊ทธ๋ฃน ๋ชฉ๋ก
์—์…‹์„ ๋Œ์–ด๋‹ค ๋†“์•„ ๋“ฑ๋กํ•˜๊ณ , ์ฃผ์†Œ๋ฅผ ๊ณ ์นœ๋‹ค
Play Mode Script
์—๋””ํ„ฐ์—์„œ ํ”Œ๋ ˆ์ดํ•  ๋•Œ ์—์…‹์„ ์–ด๋””์„œ ์ฝ์„์ง€ ๊ณ ๋ฅธ๋‹ค
Build
๋ฒˆ๋“ค์„ ๋นŒ๋“œํ•œ๋‹ค (New Build, Update a Previous Build, Clear Build Cache)
Tools
์„ค์ •ยทํ”„๋กœํ•„ยท๋ผ๋ฒจยท๋ถ„์„ ์ฐฝ์„ ์—ฐ๋‹ค

์—์…‹ ๋“ฑ๋ก

1.
์—์…‹์„ ๊ทธ๋ฃน์œผ๋กœ ๋Œ์–ด๋‹ค ๋†“๋Š”๋‹ค.
2.
์ฃผ์†Œ๋ฅผ ์งง์€ ํ‚ค๋กœ ๋ฐ”๊พผ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ์ „์ฒด ๊ฒฝ๋กœ(Assets/Art/Prefabs/Zombunny.prefab)๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์„ ํƒํ•ด ์šฐํด๋ฆญ โ†’ Simplify Addressable Names ๋ฅผ ๋ˆ„๋ฅด๋ฉด ํŒŒ์ผ ์ด๋ฆ„๋งŒ ๋‚จ๋Š”๋‹ค.
3.
์ฝ”๋“œ์—์„œ ๊ทธ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ShowEntity / OpenUIForm / PlaySound ์— ๋„˜๊ธด๋‹ค.
โš ๏ธ
๋“ฑ๋ก์€ ๋ฐ˜๋“œ์‹œ Groups ์ฐฝ์—์„œ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน ์—์…‹ ํŒŒ์ผ์„ ํ…์ŠคํŠธ๋กœ ์ง์ ‘ ๊ณ ์น˜๋ฉด GUID ๊ฐ€ ์–ด๊ธ‹๋‚˜ ์กฐ์šฉํžˆ ๋กœ๋“œ์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋˜ ์”ฌ์€ ์ฃผ์†Œ๋ฅผ ์ค„์ด์ง€ ์•Š๊ณ  ์ „์ฒด ๊ฒฝ๋กœ(Assets/โ€ฆ.unity)๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘ก๋‹ˆ๋‹ค โ€” ํ”„๋ ˆ์ž„์›Œํฌ์˜ SceneComponent ๊ฐ€ ๊ทธ ํ˜•์‹์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

Play Mode Script โ€” ์—๋””ํ„ฐ์—์„œ ์–ด๋””์„œ ์ฝ์„๊นŒ

๋ชจ๋“œ
์ฝ๋Š” ๊ณณ
์“ฐ๋Š” ๋•Œ
Use Asset Database (fastest)
ํ”„๋กœ์ ํŠธ์˜ ์—์…‹์„ ์ง์ ‘. ๋ฒˆ๋“ค ๋นŒ๋“œ๊ฐ€ ํ•„์š” ์—†๋‹ค
๊ฐœ๋ฐœ ์ค‘ ๊ธฐ๋ณธ๊ฐ’
Use Existing Build
๋ฏธ๋ฆฌ ๋นŒ๋“œํ•ด ๋‘” ๋ฒˆ๋“ค
์ถœ์‹œ ์ „ ๊ฒ€์ฆ, ์›๊ฒฉ ๋กœ๋“œยทํŒจ์น˜ ์‹œํ—˜
์ด ์„ค์ •์€ Library/ ์— ์ €์žฅ๋˜์–ด git ์œผ๋กœ ๊ณต์œ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ ๋ฐ›์œผ๋ฉด ํ•œ ๋ฒˆ ํ™•์ธํ•ด์•ผ ํ•˜๊ณ , Use Existing Build ์ธ๋ฐ ๋ฒˆ๋“ค์„ ๋นŒ๋“œํ•œ ์ ์ด ์—†์œผ๋ฉด ์—”ํ‹ฐํ‹ฐ๊ฐ€ ํ•˜๋‚˜๋„ ๋œจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฃน์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆŒ๊นŒ

๊ทธ๋ฃน์€ ๋ฒˆ๋“ค์˜ ๋‹จ์œ„์ด์ž ๋ฐฐํฌ์˜ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ž‘์€ ๊ฒŒ์ž„์€ ๊ทธ๋ฃน ํ•˜๋‚˜๋กœ ์ถฉ๋ถ„ํ•˜๊ณ , ์ปค์ง€๋ฉด ์•„๋ž˜ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
๊ธฐ์ค€
๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•
์–ป๋Š” ๊ฒƒ
๊ฐ™์ด ์“ฐ์ด๋Š”๊ฐ€
์Šคํ…Œ์ด์ง€๋ณ„, ํ™”๋ฉด๋ณ„๋กœ ๊ทธ๋ฃน์„ ๋‚˜๋ˆˆ๋‹ค
์•ˆ ์“ฐ๋Š” ์Šคํ…Œ์ด์ง€์˜ ์—์…‹์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜ค์ง€ ์•Š๋Š”๋‹ค
์ž์ฃผ ๋ฐ”๋€Œ๋Š”๊ฐ€
๋ฐธ๋Ÿฐ์Šค ๋ฐ์ดํ„ฐยท์ด๋ฒคํŠธ UI ๋ฅผ ๋”ฐ๋กœ ๋‘”๋‹ค
ํŒจ์น˜ ๋•Œ ์ž‘์€ ๋ฒˆ๋“ค๋งŒ ๋‹ค์‹œ ๋ฐ›๋Š”๋‹ค
์•ฑ์— ๋„ฃ์„ ๊ฒƒ์ธ๊ฐ€
Local ๊ทธ๋ฃน / Remote ๊ทธ๋ฃน
์„ค์น˜ ์šฉ๋Ÿ‰์„ ์ค„์ด๊ณ  ๋‚˜๋จธ์ง€๋ฅผ ์ฒซ ์‹คํ–‰ ๋•Œ ๋ฐ›๋Š”๋‹ค
๊ทธ๋ฃน ์„ค์ •์˜ Bundle Mode ๋กœ ๊ทธ๋ฃน ์•ˆ์—์„œ๋„ ๋ฌถ๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ฆ…๋‹ˆ๋‹ค.
Bundle Mode
๊ฒฐ๊ณผ
๋งž๋Š” ๊ฒฝ์šฐ
Pack Together
๊ทธ๋ฃน ์ „์ฒด๊ฐ€ ๋ฒˆ๋“ค ํ•˜๋‚˜
ํ•ญ์ƒ ๊ฐ™์ด ์“ฐ์ด๋Š” ์—์…‹ (์˜ˆ์ œ๊ฐ€ ์ด ๋ฐฉ์‹)
Pack Separately
์—์…‹๋งˆ๋‹ค ๋ฒˆ๋“ค ํ•˜๋‚˜
๋”ฐ๋กœ๋”ฐ๋กœ ์“ฐ์ด๋Š” ํฐ ์—์…‹ (์Šคํ…Œ์ด์ง€ ์”ฌ, ๋ฐฐ๊ฒฝ์Œ)
Pack Together By Label
๊ฐ™์€ ๋ผ๋ฒจ๋ผ๋ฆฌ ๋ฒˆ๋“ค ํ•˜๋‚˜
๊ทธ๋ฃน์„ ๋Š˜๋ฆฌ์ง€ ์•Š๊ณ  ๋ฌถ์Œ์„ ์กฐ์ ˆํ•˜๊ณ  ์‹ถ์„ ๋•Œ
๋ฒˆ๋“ค ํ•˜๋‚˜์—์„œ ์—์…‹ ํ•˜๋‚˜๋งŒ ํ•„์š”ํ•ด๋„ ๋ฒˆ๋“ค ์ „์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜ต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฒˆ๋“ค์˜ ์—์…‹์„ ํ•˜๋‚˜๋ผ๋„ ์“ฐ๋Š” ๋™์•ˆ์—๋Š” ๋ฒˆ๋“ค์ด ๋‚ด๋ ค๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "๊ฐ™์ด ์“ฐ์ด๋Š” ๊ฒƒ๋ผ๋ฆฌ ๋ฌถ๋Š”๋‹ค"๊ฐ€ ๊ธฐ๋ณธ ์›์น™์ธ ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋นŒ๋“œ

๋ฉ”๋‰ด
ํ•˜๋Š” ์ผ
Build โ†’ New Build โ†’ Default Build Script
๋ชจ๋“  ๊ทธ๋ฃน์˜ ๋ฒˆ๋“ค๊ณผ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค
Build โ†’ Update a Previous Build
์ด์ „ ๋นŒ๋“œ์™€ ๋น„๊ตํ•ด ๋ฐ”๋€ ๊ฒƒ๋งŒ ๋‹ค์‹œ ๋งŒ๋“ ๋‹ค (ํŒจ์น˜์šฉ)
Build โ†’ Clear Build Cache โ†’ All
๋นŒ๋“œ ์บ์‹œ๋ฅผ ๋น„์šด๋‹ค. ๋นŒ๋“œ ๊ฒฐ๊ณผ๊ฐ€ ์ด์ƒํ•  ๋•Œ
ํ”Œ๋ ˆ์ด์–ด(๊ฒŒ์ž„ ์‹คํ–‰ ํŒŒ์ผ)๋ฅผ ๋นŒ๋“œํ•  ๋•Œ Addressables ๋ฒˆ๋“ค์„ ํ•จ๊ป˜ ๋นŒ๋“œํ• ์ง€๋Š” Addressables Settings ์˜ Build Addressables on Player Build ๋กœ ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ Unity ํ™˜๊ฒฝ์„ค์ •์„ ๋”ฐ๋ฅด๋ฉฐ, ํ™˜๊ฒฝ์„ค์ •์˜ ๊ธฐ๋ณธ์€ "ํ•จ๊ป˜ ๋นŒ๋“œ"์ž…๋‹ˆ๋‹ค. CI ์ฒ˜๋Ÿผ ๋‹จ๊ณ„๋ฅผ ๋‚˜๋ˆ„๊ณ  ์‹ถ์„ ๋•Œ ๋•๋‹ˆ๋‹ค.

๋ถ„์„ ๋„๊ตฌ

Groups ์ฐฝ์˜ Tools โ†’ Window ์•„๋ž˜์— ์žˆ์Šต๋‹ˆ๋‹ค.
๋„๊ตฌ
์•Œ๋ ค ์ฃผ๋Š” ๊ฒƒ
Analyze
์—ฌ๋Ÿฌ ๋ฒˆ๋“ค์— ์ค‘๋ณต์œผ๋กœ ๋“ค์–ด๊ฐ„ ์—์…‹. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‘ ๊ทธ๋ฃน์˜ ํ”„๋ฆฌํŒน์ด ๊ฐ™์€ ๋จธํ‹ฐ๋ฆฌ์–ผ์„ ์“ฐ๋Š”๋ฐ ๊ทธ ๋จธํ‹ฐ๋ฆฌ์–ผ์„ ๋“ฑ๋กํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์–‘์ชฝ ๋ฒˆ๋“ค์— ๋ณต์‚ฌ๋ณธ์ด ํ•˜๋‚˜์”ฉ ๋“ค์–ด๊ฐ„๋‹ค. ์ฐพ์•„์„œ ๊ณต์šฉ ๊ทธ๋ฃน์œผ๋กœ ๋นผ ์ค€๋‹ค
Addressables Report
๋งˆ์ง€๋ง‰ ๋นŒ๋“œ์˜ ๋ฒˆ๋“ค๋ณ„ ํฌ๊ธฐ์™€ ๋‚ด์šฉ๋ฌผ, ์˜์กด ๊ด€๊ณ„
Labels
๋ผ๋ฒจ ๊ด€๋ฆฌ. "๋ฏธ๋ฆฌ ๋ฐ›์„ ๋ฌถ์Œ"์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์—์…‹์„ ํ•œ๊บผ๋ฒˆ์— ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ ์“ด๋‹ค
Profiles
๋นŒ๋“œ ๊ฒฝ๋กœยท๋กœ๋“œ ๊ฒฝ๋กœ(๊ฐœ๋ฐœ ์„œ๋ฒ„ / ์šด์˜ CDN) ์ „ํ™˜
์‹คํ–‰ ์ค‘์˜ ํ•ธ๋“คยท๋ฒˆ๋“ค ์ƒํƒœ๋Š” Unity Profiler ์˜ Addressables ๋ชจ๋“ˆ์—์„œ ๋ด…๋‹ˆ๋‹ค.

์ถœ์‹œ ์ „ ์ ๊ฒ€

์ฝ”๋“œ์˜ ์ฃผ์†Œ ์ƒ์ˆ˜๊ฐ€ ๋ชจ๋‘ Groups ์ฐฝ์— ๋“ฑ๋ก๋ผ ์žˆ๋‹ค (์˜คํƒ€๋Š” ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹คํŒจ ์ด๋ฒคํŠธ๋กœ๋งŒ ๋“œ๋Ÿฌ๋‚œ๋‹ค)
Play Mode Script ๋ฅผ Use Existing Build ๋กœ ๋ฐ”๊พธ๊ณ  ๋ฒˆ๋“ค์„ ๋นŒ๋“œํ•ด ํ•œ ํŒ์„ ๋๊นŒ์ง€ ํ”Œ๋ ˆ์ดํ•ด ๋ดค๋‹ค
Analyze ๋กœ ์ค‘๋ณต ์—์…‹์„ ํ™•์ธํ–ˆ๋‹ค
์—”ํ‹ฐํ‹ฐ ํ”„๋ฆฌํŒน์— ๋กœ์ง ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ถ™์–ด ์žˆ์ง€ ์•Š๊ณ , UI ํผ ํ”„๋ฆฌํŒน์—๋Š” ๋ถ™์–ด ์žˆ๋‹ค
ํ™•์ธ์ด ๋๋‚œ ๋’ค Play Mode Script ๋ฅผ Use Asset Database ๋กœ ๋˜๋Œ๋ ธ๋‹ค
๐Ÿ’ก
"์—๋””ํ„ฐ์—์„œ๋Š” ๋˜๋Š”๋ฐ ๋นŒ๋“œ์—์„œ ์•ˆ ๋œ๋‹ค"์˜ ํ”ํ•œ ์›์ธ์€ ์—๋””ํ„ฐ๊ฐ€ ๋ฒˆ๋“ค์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์—์…‹์„ ์ฝ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Use Asset Database ๋ชจ๋“œ์—์„œ๋Š” ์—์…‹์„ ๊ณ ์น˜๋ฉด ๋ฐ”๋กœ ๋ฐ˜์˜๋˜์ง€๋งŒ, ๋นŒ๋“œ๋œ ๊ฒŒ์ž„์€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋นŒ๋“œํ•œ ๋ฒˆ๋“ค์„ ์”๋‹ˆ๋‹ค. ๋ฒˆ๋“ค์ด ์˜ค๋ž˜๋๊ฑฐ๋‚˜, ๋ฒˆ๋“ค๋กœ ๋ฌถ๋Š” ๊ณผ์ •์—์„œ๋งŒ ๋“œ๋Ÿฌ๋‚˜๋Š” ๋ฌธ์ œ(๋น ์ง„ ์˜์กด ์—์…‹, ์ œ๊ฑฐ๋œ ์…ฐ์ด๋” ๋ณ€ํ˜•)๊ฐ€ ์žˆ์œผ๋ฉด ์—๋””ํ„ฐ์—์„œ๋Š” ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ถœ์‹œ ์ „์— Use Existing Build ๋กœ ํ•œ ๋ฒˆ ๋Œ๋ ค ๋ณด๋Š” ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์›๊ฒฉ ๋ฐฐํฌ์™€ ํŒจ์น˜๋Š” Resource Updating(๋ฆฌ์†Œ์Šค ์—…๋ฐ์ดํŠธ)-Addressable ์—์„œ ์ด์–ด์ง‘๋‹ˆ๋‹ค.