์ฌ๋ก๋ ๋งค ์ฌ๋ง๋ค ํ์ํ๋ฐ ๊ฒ์๋ฉ๋์ ์ฒ๋ผ ์ ๋ณด๋ฅผ ์ ์ฅํ ํ์๋ ์๊ณ ๊ทธ๋ฅ ํจ์ ๋ฉ์ด๋ฆฌ์.
์ด๊ฑธ ์ฒ์ ์ฑ๊ธํค์ผ๋ก ์ค์ ํด์ ์ฒซ ์ฌ์์ ๋ง๋ค์ด์ง๊ฑธ ๋งค์ฌ๋ง๋ค ์ฌํ์ฉ ํ ๊น? ์๋๋ฉด ๊ฒ์์ค๋ธ์ ํธ์ ๋ฃ์ด ํ๋ฆฌํน์ ์์ผ ๋งค ์ฌ๋ง๋ค ํ๋์ฉ ๋ ๋๊น?
์ ๋ persistentํ ๊ธฐ๋ฅ(input, audio, data ..)persistent scene์ ๋ฐ๋ก๋ง๋ค์ด์ scene additive๋ก ํ๋ก๊ทธ๋จ ์์~์ข ๋ฃ๋์ ์ ์ง๋๋๋กํจ
persistent scene์ additive๋ก ๋ถ๋ฌ์จ๋ค๋ ์๋ฆฌ์? ์๋๋ฉด persistent scene์ ๋๊ณ ๋ค๋ฅธ ์ฌ์ additive๋ก ๋ถ๋ฌ์จ๋ค๋ ์๋ฆฌ์? ์ ์๋ผ๋ฉด ๋ถ๋ฌ์ค๋ ์์๊ฐ ๊ฐ์ฅ ๋จผ์ ์์ผ๋๋ persistent scene์ด ๋์ค์ ๋ถ๋ ค์์ ์ฐธ์กฐํ๋ ์์๊ฐ ๊ผฌ์ผ๊บผ๊ฐ์๋ฐ
Build Setting์๋ ๋ค๋ฅธ๊ธฐ๋ฅ์๋ฌด๊ฒ๋์๋ Bootstrap scene ๋ฑ 1๊ฐ๋ง์ฌ๋ฆฌ๊ณ ๋๋จธ์ง ๋ชจ๋ scene์ addressable๋ก, ๊ฒ์์์์ Bootstrap scene์ด persistent load -> unload bootstrap -> game(menu) scene load (splash scene์ ์ง์ ๋ง๋ค์ด์๋ถ๋ฌ๋๋๊ณ ํ๊ณ ์ถ์๊ฑธํจ.) ์์ ์ persistent๊ฐ ์ต์ด๋ก ๋ถ๋ ค์ ํญ์ ์กด์ฌํ๋ฉฐ ์ ์ง๋๊ณ ์๊ณ , scene load/unload๋ persistent ์์ ๋ด๋น
์๋ํฐ์์ ์ด๋ ํ ํน์ scene์์ ์์์ persistent๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ๊ฐ ๋ณต์กํด์ง๊ณ ๋ฌ๋ผ์ง๋๊ฒฝ์ฐ๋ EditorColdStartup ์ [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] ์จ์ ๊ตฌํํด ์ฌ์ฉ์ค
https://github.com/UnityTechnologies/open-project-1/wiki/Game-architecture-overview
์ด๊ฑฐ๋
https://kb.heathenengineering.com/company/concepts/bootstrap-scene
์ฝ์ด๋ณด๋ฉด ๋์๋ ๋ฏ. ์ ์ ๊ฑฐ๋ ๋น์ทํ๋ฐ ๋ด์๋๋ก ์ค๊ณํด์ ์ฐ๋์ค
persistent scene์ด ํญ์ ์ฐ์ ์ ์ผ๋ก ์กด์ฌํด์ผํ๋๊ฒ ๊ธฐ๋ณธ๋ ผ๋ฆฌ์. ์ค์ ์ดํ๋ฆฌ์ผ์ด์ ์์ ํญ์ ๊ทธ๊ฒ ๋ณด์ฅ๋์ง๋ง, ์๋ํฐ๋จ์์ ๊ฐ๋ฐ์ค์ ์ด๋ฐ์ ๋ฐ ์ ๋ก์ฌํญ์ด ์๊ธฐ๋๋ฐ ๊ทธ๊ฑธ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ง๋ ๋ฐฉ๋ฒ๋๋ง๊ณ ์๊ธฐ ํ๊ธฐ๋๋ฆ์ธ๋ฏ. ์ ๋ํฐ ์คํํ๋ก์ ํธ ์์ ScriptableObject๋ก fake event๋ฅผ ๋ฐ์์์ผ์ ์ด๊ธฐํ๋ฅผ๋๋ฆผ. ๋๋์ค์ ๊ฒ์ํ ๋์ ์ต๋ํ ๊ฐ๊ฒ ๋ง๋๋ ค ํ๋ ์ด๋ชจ๋ ์ด์ ์ ์ด๋ฐ์ ๋ฐ ์ ์ฝ์ฌํญ์ ํ์ธํ๊ณ ํ์ํ๊ฒฝ์ฐ์ด๋ฉด scene load์ด์ ์ persistent ๋ก๋(single - ํ์ฌ์ฌ ์๋ unload) -> ํ์ฌ scene ๋ก๋(additive) -> SetActiveScene ์ผ๋ก ํ์ฌ scene์ค์ ํจ. ๊ตณ์ด ์ด๋ฐํ์์๋ ํ๋กํ ํ์ดํ ํ ์คํธ scene์ด๋ฉด ๊ทธ์๋ง๊ฒ ๊ตฌ์ฑํด์์ฐ๋ฉด๋
๊ด์ฐฎ์ ๋ฐฉ๋ฒ์ด๋ค, ๊ทธ๋ ๊ฒํ๋ฉด ํ ์คํธํ ๋๋ ํน์ ์ฌ persistent scene์์ ๋ถ๋ฌ์ค๋ฉด๋๋๊ฑฐ์? ๋๊ฐ์๊ฒฝ์ฐ๋ managerํด๋์ค dontdestroy๊ฑธ๊ณ ํ๋ฆฌํน ํ๋๊ฐ ๋งค๋์ ๋ค ํธ์ถํ๊ฒ ํด์ ํ๋ฆฌํน๋ง ๊ฐ์ฌ์ ํ๋์ฉ ๋ฃ์ด์ฃผ๋ ๋ฐฉ์์ผ๋ก ํ๊ฑฐ๋
๊ณ ๋ง์ ๋๊ธ ์ฐ๋์ฌ์ด์ ๋ง์ด๋ฌ๋ ธ๋ค ์ฐพ์๋ด
์ฐ๋ ๋ฐฉ์์ด ์ ์ด๋ ๊ฒ ๋๋ ๋น์ทํ๊ฐ ํ๋๋ ์๊ฐ์ ๋ฐ์ ์๋ฃ๊ฐ ๋๊ฐ๋ค ใ ใ ;
์ด๊ฒ ๋ฉ์ด์ ธํ ๋ฐฉ์์ธ์ง ๊น์ง๋ ์ ๋ชฐ๊ฒ ๋๋ฐ ์ ๋ ์ ์ ํ๋ก์ ํธ๋ก ๋์๋ง์ด ๋ฐ์๊ณ , ํ์์๋ฃ๋ ๋ญ๋ง๋ค๋ค๊ฐ ์ด์ ์ฐพ์์ฌ์ดํธ์ธ๋ฐ.. ๊ฐ๋ ์ด๋ ์ ๋ฆฌ๊ฐ ๊ธฐ์กด์์ฐ๋ ์ํคํ ์ณ๋ ๋น์ทํ๋ฉด์ ์๋์์ด์ ์คํฌ๋ฉํด๋ฟ์ ใ ใ
scene loader ๋ persistent scene์์ ์์์ ์ง, ์ด๋์๋ ์ ๊ทผ๊ฐ๋ฅํ๊ฒ๋ ์ฐ๋์ค
ํน๋ณํ ์ด์ ๊ฐ ์๋ํ ์ฌ ๋ก๋ ๊ฐ์๊ฑด ๊ตณ์ด ์ฌ๋ฌ๊ฐ ์์ ํ์๊ฐ ์์๊ฑฐ ๊ฐ์๋ฐ. ๊ทธ๋ฅ Manager ์ฌ ๊ฐ์๊ฑฐ ํ๋ ๋ง๋ค์ด์ ๊ฑฐ๊ธฐ๋ค๊ฐ ์ง์ด๋ฃ๊ณ Additve๋ก ๋ถ๋ฌ์์ ๊ณ์ ์ ์ง์ํค๋ฉด์ ์จ๋จน๋๊ฒ ๋์๊ฑฐ ๊ฐ์.
๋งค ์ฌ๋ง๋ค ๋ฃ๋๊ฒ๋ง ์๋๋ฉด ์ด๋ค ๋ฐฉ์์ด๋ ๋์์ง ์์๋ฏ. ๋๋ผ๋ฉด ์ธ๋๋ง๋ค ์ธ์คํด์์์ดํธํด์ ์ฐ๊ณ ๋์คํธ๋ก์ดํจ
๋๊ฐ์ ๊ฒฝ์ฐ๋ Manager Initiator๋ผ๊ณ ์ ์ผ ์ฒ์์ ๋งค๋์ ๋ค ์ด๊ธฐํํ๋ ํด๋์ค๊ฐ์ง ํ๋ฆฌํน๋ง๋ค์ด์ ๊ฐ์ฌ์ ๋ฐฐ์นํด์ ์์ผ๋ฉด ์คํํ๋๋กํจ
์คํธ ์๋ก์ด ์ ๋ณด ๋ง์ด ๋ฐฐ์ฐ๋ด์ ํ๋์ฉ ์ฐพ์๋ณด๊ณ ์ ์ผ ๋ง๋๊ฑธ๋ก ๊ณ ๋ฅด๊ฒ ์ต๋๋ค ๊ฐ์ฌํฉ๋๋ค.