Abstract
๋ก๋ฉ๊ณผ ์บ์ฑ์์ ์์์ผ ํ ๊ฒ์ ๋ ๊ฐ์ง์
๋๋ค โ ๋ก๋๋ ๋น๋๊ธฐ๋ค, ๊ทธ๋ฆฌ๊ณ ํ ๋ฒ ๋ก๋ํ ๊ฒ์ ํ๋์ ๋จ์ ์๋ค. ํ๋ ์์ํฌ๋ ์บ์๋ฅผ ๋ ๊ฒน์ผ๋ก ๋ก๋๋ค. ๊ฒ์ "์จ๊ธด ์ธ์คํด์ค๋ฅผ ๋ณด๊ดํ๋ ํ", ์์ "ํ๋ฆฌํน ์๋ณธ์ ๋ถ์ก๊ณ ์๋ Addressables ํธ๋ค". ์ด ๋ ๊ฒน์ด ์ธ์ ์ฑ์์ง๊ณ ์ธ์ ๋น์์ง๋์ง๋ฅผ ์๋ฉด ๋ก๋ฉ ๋๊น๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์กฐ์ ํ ์ ์์ต๋๋ค.
์ค๋ฌด์์ ํ์ํ ์๊ฐ
โข
์ฒซ ์คํฐ๋ง ๋๊ธฐ๊ณ ๊ทธ ๋ค๋ ๋งค๋๋ฌ์ด ์ด์ ๊ฐ ๊ถ๊ธํ ๋
โข
"์ ์ ๋ค ์ก์๋๋ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ค์ด๋ ๋ค"๋ ๋ณด๊ณ ๋ฅผ ๋ฐ์์ ๋
โข
ํ ์ฉ๋๊ณผ ๋ง๋ฃ ์๊ฐ์ ์ผ๋ง๋ก ์ก์์ผ ํ ์ง ์ ํ ๋
ToyboxNightmare ์์๋
์ํฐํฐ ๊ทธ๋ฃน 5๊ฐ๊ฐ ๊ฐ์ ์ธ์คํด์ค ํ์ ๊ฐ๊ณ , ์ ๋ถ ๋ง๋ฃ 60์ด ยท ๊ฒ์ฌ ์ฃผ๊ธฐ 60์ด์
๋๋ค. ์ ๊ณผ ํฌ์ฌ์ฒด๊ฐ ๋์์์ด ์ฌ์ฌ์ฉ๋๋ฏ๋ก ์ ํฌ ์ค์๋ ์ ๋ก๋ฉ์ด ๊ฑฐ์ ์ผ์ด๋์ง ์์ต๋๋ค.
๋ก๋ฉ์ด ์ผ์ด๋๋ ์์๋ฅผ ๋จ๊ณ๋ณ๋ก ๋ณด๋ ค๋ฉด
Resource Loading(๋ฆฌ์์ค ๋ก๋ฉ)-Addressable, ํ์ ๋ด๋ถ ๊ท์น์
์ค๋ธ์ ํธ ํ๋ง (Object Pooling) ์ ๋ณด์ธ์.
์บ์๋ ๋ ๊ฒน์ด๋ค
graph TD
A["ShowEntity("Zombunny")"] --> B{"โ ์ธ์คํด์ค ํ์<br>์ฌ๊ณ ์๋ Zombunny ๊ฐ ์๋"}
B -- ์๋ค --> Z["๊ทธ ์ธ์คํด์ค๋ฅผ ๊บผ๋ด OnShow<br>(๋ก๋ฉ ์์, ๊ฐ์ ํ๋ ์)"]
B -- ์๋ค --> C{"โก ํ๋ฆฌํน์ด ์ด๋ฏธ<br>๋ฉ๋ชจ๋ฆฌ์ ์๋"}
C -- ์๋ค --> D["Instantiate<br>(๋ก๋๋ ์ฆ์ ๋๋จ)"]
C -- ์๋ค --> E["๋ฒ๋ค์์ ํ๋ฆฌํน ๋ก๋<br>(๋ช ํ๋ ์)"] --> D
D --> Z2["OnInit โ OnShow"]Mermaid
๋ณต์ฌ
โ ์ธ์คํด์ค ํ | โก ์์
ํธ๋ค | |
๋ณด๊ดํ๋ ๊ฒ | HideEntity ๋ GameObject | ํ๋ฆฌํนยทํด๋ฆฝ ์๋ณธ |
๋๊ฐ ๊ด๋ฆฌํ๋ | ์ํฐํฐ ๊ทธ๋ฃน / UI ๊ทธ๋ฃน (ํ๋ ์์ํฌ) | Addressables |
์๋ผ๋ ๋น์ฉ | Instantiate ์ OnInit | ๋์คํฌ ์ฝ๊ธฐ |
๋น์์ง๋ ๋ | ๋ง๋ฃ ์๊ฐ์ด ์ง๋๊ฑฐ๋ ์ฉ๋์ ๋์ ๋ | ๊ทธ ์์
์ผ๋ก ๋ง๋ ์ธ์คํด์ค๊ฐ ๋ชจ๋ ํ๊ดด๋์ ๋ |
์ค์ ํ๋ ๊ณณ | Entity / UI ์ปดํฌ๋ํธ์ ๊ทธ๋ฃน ์ค์ | (์๋) |
์ ์บ์(โก)๋ ๊ฒ ์บ์(โ )์ ๋งค์ฌ ์์ต๋๋ค. ํ์ ์ธ์คํด์ค๊ฐ ํ๋๋ผ๋ ๋จ์ ์์ผ๋ฉด ํ๋ฆฌํน๋ ๋ฉ๋ชจ๋ฆฌ์ ๋จ์ต๋๋ค.
ํ ์ค์ ๊ฐ ์ฝ๋ ๋ฒ
GameFramework.prefab ์ Entity ์ค๋ธ์ ํธ์์ ๊ทธ๋ฃน๋ง๋ค ๋ค ๊ฐ์ง๋ฅผ ์ ํฉ๋๋ค.
ํ๋ | ๋ป | ์์ ์ ๊ฐ |
Instance Capacity | ํ์ ๋ณด๊ดํด ๋ ์ต๋ ๊ฐ์. ์คํฐ ์ํ์ด ์๋๋ค โ ๋์ณ๋ ์คํฐ์ ๋๊ณ , ๋์น ๋งํผ๋ง ํ์๋ ๋ ๋ณด๊ด๋์ง ์๊ณ ํ๊ดด๋๋ค | Player 4 / Enemy 64 / Projectile 64 / Effect 32 / Ally 2 |
Instance Expire Time | ์ด ์๊ฐ ๋์ ๋ค์ ์ฐ์ด์ง ์์ ์ธ์คํด์ค๋ ์ ๋ฆฌ ๋์์ด ๋๋ค | 60์ด |
Instance Auto Release Interval | ์ ๋ฆฌ ๊ฒ์ฌ๋ฅผ ๋๋ ์ฃผ๊ธฐ | 60์ด |
Instance Priority | ์ฉ๋์ด ๋์น ๋ ๋ฎ์ ๊ฒ๋ถํฐ ๋ฒ๋ฆฐ๋ค | 0 |
์ ํ๋ ์๋ น
โข
Capacity ๋ ๋์ ์ต๋ ๋ฑ์ฅ ์๋ณด๋ค ์กฐ๊ธ ํฌ๊ฒ. ๋๋ฌด ์์ผ๋ฉด ์จ์ด๋ธ๋ง๋ค Instantiate / Destroy ๊ฐ ๋ฐ๋ณต๋์ด ํ๋ง ํจ๊ณผ๊ฐ ์ฌ๋ผ์ง๋ค
โข
Expire Time ์ ์จ์ด๋ธ ์ฌ์ด ๊ฐ๊ฒฉ๋ณด๋ค ๊ธธ๊ฒ. ์งง์ผ๋ฉด ์ฌ๋ ๋์ ๋ค ํ๊ดด๋๊ณ ๋ค์ ์จ์ด๋ธ์์ ๋ค์ ๋ง๋ ๋ค
โข
๋ณด์ค์ ์๋ง ๋์ค๋ ๊ฒ์ฒ๋ผ ๊ฐ๋ ์ฐ๋ ๋ฌด๊ฑฐ์ด ๊ฒ์ ๊ทธ๋ฃน์ ๋ฐ๋ก ๋ง๋ค์ด ๋ง๋ฃ๋ฅผ ์งง๊ฒ ์ค๋ค. ๋๋ ๋ค ์ค๋ ๋ถ์ก๊ณ ์์ ์ด์ ๊ฐ ์๋ค
๋ฉ๋ชจ๋ฆฌ๋ ์ธ์ ์ค์ด๋๋
์ํฐํฐ๋ฅผ ์จ๊ธด ์งํ์๋ ์ค์ง ์์ต๋๋ค. ์ธ์คํด์ค๊ฐ ํ์ ๋จ๊ณ , ๊ทธ๋์ ํ๋ฆฌํน๋ ๋จ์ต๋๋ค. ์์ ๊ธฐ์ค์ผ๋ก ์คํฐ์ด ๋ฉ์ถ ๋ค 1~2๋ถ(๋ง๋ฃ 60์ด + ๋ค์ ๊ฒ์ฌ๊น์ง ์ต๋ 60์ด)์ด ์ง๋์ผ ์ธ์คํด์ค๊ฐ ํ๊ดด๋๊ณ , ๋ง์ง๋ง ์ธ์คํด์ค๊น์ง ์ฌ๋ผ์ง๋ฉด ํ๋ฆฌํน์ด ๋ด๋ ค๊ฐ๋๋ค.
์ง๊ธ ๋น์ฅ ๋น์ฐ๊ณ ์ถ์ ๋:
// ์ฌ๊ณ ์๋ ์ธ์คํด์ค๋ฅผ ์ ๋ถ ์ ๋ฆฌํ๋ค (์คํ
์ด์ง๋ฅผ ๋ ๋ ๋)
GameEntry.GetComponent<ObjectPoolComponent>().ReleaseAllUnused();
// ์ด์ด์, ์๋ฌด๋ ์ฐธ์กฐํ์ง ์๊ฒ ๋ ์์
์ ์์ง์ด ์ ๋ฆฌํ๋๋ก ์์ฝํ๋ค
GameEntry.GetComponent<ResourceComponent>().UnloadUnusedAssets(true);
C#
๋ณต์ฌ
ํ์ธํ๋ ๋ฒ โ ํ๋ ์ด ์ค ๋๋ฒ๊ฑฐ ์ฐฝ์ ์ด์ด ๋ค์ ํญ์ ๋ด
๋๋ค.
ํญ | ๋ณด์ด๋ ๊ฒ |
Profiler โ Object Pool | ๊ทธ๋ฃน๋ณ ์ธ์คํด์ค ํ. ๊ฐ์๊ฐ Capacity ๊ทผ์ฒ์์ ๋ฉ์ถ๋์ง, ์คํฐ์ด ๋๋ ๋ค ์ค์ด๋๋์ง |
Profiler โ Memory โ Summary | ํ
์ค์ฒยท๋ฉ์ยท์ค๋์ค๋ณ ๋ฉ๋ชจ๋ฆฌ. ์คํ
์ด์ง๋ฅผ ๋ฐ๋ณตํด๋ ๊ณ๋จ์์ผ๋ก ์ค๋ฅด์ง ์๋์ง |
๋ก๋ฉ ๋๊น ์ค์ด๊ธฐ
์ฒซ ์คํฐ์ "ํ๋ฆฌํน ๋ก๋ + ์ฒซ Instantiate" ๊ฐ ํ๊บผ๋ฒ์ ์ผ์ด๋ ๋๊น๋๋ค. ๋ก๋ฉ ํ๋ฉด์์ ๋ฏธ๋ฆฌ ์น๋ฌ ๋๋ฉด ๋ฉ๋๋ค.
๋ฐฉ๋ฒ | ๋ฏธ๋ฆฌ ์น๋ฅด๋ ๊ฒ | ๋ง๋ ๋์ |
ResourceComponent.LoadAsset ์ผ๋ก ์ก์ ๋๊ธฐ | ๋ก๋๋ง | ์ฌ์ด๋ ํด๋ฆฝ, ScriptableObject |
ํ ๋ฒ ShowEntity ํ๋ค๊ฐ ๋ฐ๋ก HideEntity | ๋ก๋ + ์ธ์คํด์คํ | ์ , ํฌ์ฌ์ฒด, ์ดํํธ |
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฃ์ด ๋ ์ธ์คํด์ค๋ Expire Time ์ด ์ง๋๋ฉด ์ฌ๋ผ์ง๋ฏ๋ก, ์ฐ๊ธฐ ์ง์ (์คํ
์ด์ง ๋ก๋ฉ ํ๋ฉด)์ ํฉ๋๋ค. ์ฝ๋๋
Resource Loading(๋ฆฌ์์ค ๋ก๋ฉ)-Addressable ์ "๋ฏธ๋ฆฌ ๋ฐ์ฐ๊ธฐ" ์ ์ ์์ต๋๋ค.
์์ฃผ ๊ฑธ๋ฆฌ๋ ๊ณณ
โข
ํ์์ ๋ค์ ๋์จ ์ธ์คํด์ค๋ ์ด์ ์ํ ๊ทธ๋๋ก์
๋๋ค. ์ฒด๋ ฅยท์์นยทํ์ด๋จธยท์ ๋๋ฉ์ดํฐ๋ฅผ OnShow ์์ ์ ๋ถ ๋ฆฌ์
ํด์ผ ํฉ๋๋ค. OnInit ์ ์ธ์คํด์ค๊ฐ ์ฒ์ ๋ง๋ค์ด์ง ๋ ํ ๋ฒ๋ง ๋ถ๋ฆฝ๋๋ค.
โข
์ฌ์ฌ์ฉ์ ์ฃผ์ ๋จ์์
๋๋ค. ๊ฐ์ ๊ทธ๋ฃน ์์์๋ Zombunny ์ธ์คํด์ค๋ Zombunny ์์ฒญ์๋ง ์ฐ์ด๊ณ Hellephant ์์ฒญ์๋ ์ฐ์ด์ง ์์ต๋๋ค.
โข
Destroy ๋ SetActive(false) ๋ก ์น์ฐ๋ฉด ํ์ด ์ด๊ธ๋ฉ๋๋ค. ๋ฐ๋์ HideEntity(์์ ์์๋ SafeHide())๋ก ๋๋ ค๋ณด๋
๋๋ค.
โข
๋ก๋์ ์คํจํด๋ ์์ธ๋ ๋์ง ์์ต๋๋ค. ์คํจ ์ด๋ฒคํธ๋ง ์ต๋๋ค. ์๋ชป๋ ์ฃผ์๋ฅผ ๋ฐ๋ณต ์์ฒญํด๋ ์คํจํ ํธ๋ค์ ๊ทธ๋๊ทธ๋ ํด์ ๋๋ฏ๋ก ์์ด์ง ์์ต๋๋ค.




