Abstract
๊ฒ์์๋ ์ฝ๋ ๋ง๊ณ ๋ ๊ฐ์ด ์์ต๋๋ค โ ์ ์ ์ฒด๋ ฅ, ํ๋ฉด ๋ฌธ๊ตฌ, ์๋ฒ ์ฃผ์, ๋ณผ๋ฅจ, ํ์ฌ ์ ์. ์ด ํ์ด์ง๋ ๊ทธ ๊ฐ๋ค์ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ๋ฃ์ด ๋๋ ๋ค์ฏ ๊ฐ์ ์๋์ ์๊ฐํฉ๋๋ค. ์ด๋ ์๋์ ๋ฃ์์ง๋ ๋ ๊ฐ์ง ์ง๋ฌธ์ผ๋ก ์ ํด์ง๋๋ค: ๋๊ฐ ๊ฐ์ ์ ํ๋, ๊ทธ๋ฆฌ๊ณ ์ธ์ ๊น์ง ๋จ์์ผ ํ๋.
์ด๋ ์๋์ ๋ฃ์๊น
graph TD
Q1{"๊ฐ์ ๋๊ฐ ์ ํ๋?"}
Q1 -- "๊ฐ๋ฐ์ (๋น๋ ์ ์ ์ ํด์ง)" --> Q2{"์ด๋ค ๋ชจ์์ธ๊ฐ?"}
Q1 -- "์คํ ์ค์ ์๊ธด๋ค" --> Q3{"๊ฒ์์ ๊บผ๋<br>๋จ์์ผ ํ๋?"}
Q2 -- "๊ฐ์ ๋ชจ์์ ํ์ด ์ฌ๋ฌ ๊ฐ" --> DT["DataTable<br>์ ์คํฏ, ์์ดํ
๋ชฉ๋ก"]
Q2 -- "์ด๋ฆ ํ๋์ ๊ฐ ํ๋" --> CF["Config<br>์๋ฒ ์ฃผ์, ์์"]
Q2 -- "์ธ์ด๋ง๋ค ๋ค๋ฅธ ๋ฌธ์ฅ" --> LC["Localization<br>UI ๋ฌธ๊ตฌ"]
Q3 -- "๋จ์์ผ ํ๋ค" --> ST["Setting<br>๋ณผ๋ฅจ, ์ต๊ณ ์ ์"]
Q3 -- "์ด๋ฒ ์คํ๋ง" --> DN["DataNode<br>ํ์ฌ ์คํ
์ด์ง, ์์ ์ํ"]Mermaid
๋ณต์ฌ
์๋ | ๊ฐ์ ์ถ์ฒ | ๊ฒ์ ์ฝ๋๊ฐ ์ธ ์ ์๋ | ์ ์ฅ๋๋ | ์์ธ |
DataTable | ํ
์คํธ ์์
| ์ฝ๊ธฐ๋ง | ||
Config | ํ
์คํธ ์์
| ์ฝ๊ธฐ (๋ฐํ์ ์ถ๊ฐ๋ ๊ฐ๋ฅ) | ||
Localization | ํ
์คํธ ์์
(์ธ์ด๋ณ) | ์ฝ๊ธฐ๋ง | ||
Setting | ํ๋ ์ด์ด ๊ธฐ๊ธฐ | ์ฝ๊ณ ์ฐ๊ธฐ | ๋์คํฌ | |
DataNode | ์คํ ์ค ์ฝ๋ | ์ฝ๊ณ ์ฐ๊ธฐ | ๋ฉ๋ชจ๋ฆฌ๋ง |
์์ ์
(DataTable ยท Config ยท Localization)์ "ํ
์คํธ ์์
์ ์ฝ์ด ํด์ํ๋ค"๋ ๊ณผ์ ์ด ๊ฐ์์ ๊ฐ์ ๋ก๋ฉ ๋ถํ์ ๊ณต์ ํฉ๋๋ค(
Data Provider System(๋ฐ์ดํฐ ๊ณต๊ธ์ ์์คํ
)). ๊ทธ๋์ ์
๋ค ReadData(์ฃผ์) โ ์ฑ๊ณต ์ด๋ฒคํธ โ ์กฐํ๋ผ๋ ๊ฐ์ ์์๋ก ์๋๋ค.
ToyboxNightmare ๋ ์ด๋์ ๋ฌด์์ ๋์๋
๋ค์ฏ ์๋ ์ค ํ๋๋ ์ฐ์ง ์์ต๋๋ค. ๊ท๋ชจ๊ฐ ์์์ ์ ๋ถ ์ฝ๋์ ๊ฐ์ฒด๋ก ์ถฉ๋ถํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋์ "๋์ค์ ์ด๋ ์๋์ผ๋ก ๊ฐ ๊ฐ์ธ์ง"๊ฐ ๋๋ฌ๋๋๋ก ๋ชจ์ ๋์์ต๋๋ค.
์ง๊ธ ์๋ ๊ณณ | ๋ด์ฉ | ์ปค์ง๋ฉด ๊ฐ ๊ณณ |
EnemyTable, WeaponTable, AllyTable (C# ์์ ๋ฐฐ์ด) | ์ 5์ข
ยท๋ฌด๊ธฐ 4์ข
ยท์๊ตฐ์ ์์น | DataTable |
UITable, SoundTable (C# ์์) | Addressables ์ฃผ์, ๊ทธ๋ฃน ์ด๋ฆ | Config ๋๋ ๊ทธ๋๋ก |
HUDForm ์ const string | "Select a character", "Score: {0}" | Localization |
(์ ์ฅํ์ง ์์) | ๋ณผ๋ฅจ, ์ต๊ณ ์ ์ | Setting |
SurvivalGame ์ ํ๋ | ํ์ฌ ์ ์, ๊ฒ์์ค๋ฒ ์ฌ๋ถ | ๊ทธ๋๋ก (๋๋ Procedure ๊ฐ ๋๋ฉด DataNode) |
"์ฒ์๋ถํฐ ์ ๋ถ ํ
์ด๋ธ๋ก" ๋ง๋ค ํ์๋ ์์ต๋๋ค. ๊ฐ์ ํ๊ณณ์ ๋ชจ์ ๋๊ธฐ๋ง ํ๋ฉด ์ฎ๊ธฐ๋ ๊ฒ์ ๋์ค์ ๋ฐ๋์ ์ผ์
๋๋ค. ํฉ์ด์ ธ ์์ผ๋ฉด ์ฎ๊ธธ ์ ์์ต๋๋ค.
์ด ์๋์
์์ ๋ค๋ฅธ ์ ยท ๋ณธ๋ฌธ์ ์ฝ์ ๋ ์ฃผ์ํ ์
โข
๋ณธ๋ฌธ์ DataTableManager.CreateDataTable<T>(), SetSettingHelper, Load ๋ฑ์ ์ฝ์ด API ์
๋๋ค. ๊ฒ์ ์ฝ๋๋ GameEntry.GetComponent<DataTableComponent>() ๊ฐ์ Unity ์ปดํฌ๋ํธ๋ฅผ ํตํ๊ณ , ํฌํผ ์ง์ ๊ณผ ์ด๊ธฐ ๋ก๋๋ ์ปดํฌ๋ํธ๊ฐ ๋์ ํฉ๋๋ค.
โข
"๋ฆฌ์์ค ์์คํ
์ฐ๋"์ ๋ฐ์ดํฐ ํ์ผ์ ์ด ์๋์
์์ Addressables ์ ๋ฑ๋กํ TextAsset ์ด๊ณ , ReadData ์๋ ๊ทธ ์ฃผ์๋ฅผ ๋๊น๋๋ค. "์งํ ์ํฉ ์ด๋ฒคํธ"๋ ๋ฐ์ํ์ง ์๊ณ ์ฑ๊ณตยท์คํจ๋ง ์ต๋๋ค.
โข
๋ก๋๋ ๋น๋๊ธฐ์
๋๋ค. ReadData ์งํ์๋ ๋น์ด ์๊ณ , ์ฑ๊ณต ์ด๋ฒคํธ ๋ค์ ์กฐํํด์ผ ํฉ๋๋ค. ๊ทธ๋์ ๋ฐ์ดํฐ ๋ก๋ฉ์ ๋ณดํต ๊ฒ์ ์์ ์ ์ ์ฉ Procedure(Preload)์์ ๋ชจ์์ ํ๊ณ , ์ ๋ถ ๋๋๋ฉด ๋ค์ Procedure ๋ก ๋์ด๊ฐ๋๋ค.
๊ฐ์
GameFramework์ ๋ฐ์ดํฐ ์์คํ
(Data Systems)์ ๊ฒ์ ๋ฐ์ดํฐ, ์ค์ , ๊ตฌ์ฑ ๋ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
์ด ์ปดํฌ๋ํธ๋ ๋ค์ฏ ๊ฐ์ง ์ฃผ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ ํ์ ์์คํ
์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ๊ฐ ๊ฒ์ ๋ฐ์ดํฐ์ ์ ์ฅ, ์ ๊ทผ, ์กฐ์งํ, ์ง์์ฑ์ ๋ด๋นํฉ๋๋ค.
๋ค์ฏ ๊ฐ์ง ์ฃผ์ ๋งค๋์
1.
DataTableManager โ ๊ณ ์ ์๋ณ์๋ฅผ ๊ฐ์ง ํ(Row) ๋จ์์ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ํ
์ด๋ธ ๊ด๋ฆฌ
2.
LocalizationManager โ ๋ค๊ตญ์ด ํ
์คํธ ์ฝํ
์ธ ๊ด๋ฆฌ(ํค-๊ฐ ๋์
๋๋ฆฌ ๊ธฐ๋ฐ)
3.
ConfigManager โ ํค-๊ฐ ๊ธฐ๋ฐ ๊ฒ์ ์ค์ ๊ฐ ์ ๊ทผ
4.
SettingManager โ ์ฌ์ฉ์ ์ค์ ๊ฐ ์ ์ฅ/๋ก๋
5.
DataNodeManager โ ๊ณ์ธต์ ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ ๋
ธ๋ ๊ด๋ฆฌ
๊ณตํต ํจํด
๊ฐ ์์คํ
์ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์
์ ์ฒ๋ฆฌํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ ๊ณตํต ์ํคํ
์ฒ ํจํด์ ๊ณต์ ํฉ๋๋ค.
โข
๋ชจ๋ ๋งค๋์ ๋ GameFrameworkModule์ ์์
โข
๋ฐ์ดํฐ ๋ก๋๋ฅผ ์ํ DataProvider ํจํด ์ฌ์ฉ
โข
ํ๋ซํผ๋ณ ๊ตฌํ์ ์ํ Helper ์ธํฐํ์ด์ค ํ์ฉ
โข
ํจ์จ์ ์ธ ์กฐํ๋ฅผ ์ํ ๋์
๋๋ฆฌ(Dictionary) ๊ธฐ๋ฐ ์ ์ฅ
โข
ํ์
์์ ์ฑ(Type-safe) ์๋ ๋ฐ์ดํฐ ์ ๊ทผ ๋ฉ์๋ ์ ๊ณต
์์คํ ๋ณ ์์ธ ์ค๋ช
1. DataTable System
๊ตฌ์กฐํ๋ ํ์
์์ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ ๊ณตํ๋ฉฐ, ์บ๋ฆญํฐ ์คํฏ, ์์ดํ
์์ฑ, ๋ ๋ฒจ ์ค์ ๋ฑ์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
ํน์ง
โข
์ ๋ค๋ฆญ์ ํตํ ๊ฐ๋ ฅํ ํ์
์์ ์ฑ
โข
ID ๊ธฐ๋ฐ ๋น ๋ฅธ ๋ฐ์ดํฐ ์กฐํ
โข
ํ(Row) ํํฐ๋ง, ๊ฒ์, ์ ๋ ฌ ์ง์
โข
๋ฌธ์์ด/๋ฐ์ด๋๋ฆฌ/๋ฆฌ์์ค์์ ๋ฐ์ดํฐ ๋ก๋ ๊ฐ๋ฅ
์ฌ์ฉ ์์
1.
IDataRow ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค ์์ฑ
2.
DataTableManager.CreateDataTable<T>()๋ก ํ
์ด๋ธ ์์ฑ
3.
ParseData ๋๋ ๋ฆฌ์์ค ์์คํ
์ ํตํด ๋ฐ์ดํฐ ๋ก๋
4.
ID๋ ์กฐ๊ฑด์์ผ๋ก ํ ๊ฒ์
2. Localization System
๋ค๊ตญ์ด ์ง์์ ์ํด ๋ฌธ์์ด ๋์
๋๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ ์์คํ
์
๋๋ค.
ํน์ง
โข
๋ค์ค ์ธ์ด ์ง์
โข
ํค ๊ธฐ๋ฐ ๋ฌธ์์ด ๊ฒ์
โข
ํ๋ ์ด์คํ๋ ๊ธฐ๋ฐ ๋ฌธ์์ด ํฌ๋งทํ
โข
๋ฆฌ์์ค ์์คํ
๊ณผ ์ฐ๊ณํ์ฌ ์ธ์ด ๋ฐ์ดํฐ ๋ก๋
์ฌ์ฉ ์์
1.
LocalizationManager.Language๋ก ํ์ฌ ์ธ์ด ์ค์
2.
ReadData๋ก ์ธ์ด ๋ฐ์ดํฐ ๋ก๋
3.
GetString์ผ๋ก ๋ฒ์ญ๋ ๋ฌธ์์ด ๊ฐ์ ธ์ค๊ธฐ
3. Configure System
๊ฒ์ ์ ์ญ ์ค์ ์ ํค-๊ฐ ํํ๋ก ์ ๊ณตํ๋ฉฐ, ์ฃผ๋ก ์ ์ ๊ฒ์ ์ค์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
ํน์ง
โข
Key-Value ๊ธฐ๋ฐ ์ค์ ์ ์ฅ
โข
bool, int, float, string ๋ฑ ๋ค์ํ ํ์
์ง์
โข
๋ฐํ์ ์์ ๊ฐ๋ฅ
โข
๋ฆฌ์์ค ์์คํ
๊ณผ ์ฐ๋ ๊ฐ๋ฅ
์ฌ์ฉ ์์
1.
ReadData๋ก ์ค์ ๋ฐ์ดํฐ ๋ก๋
2.
HasConfig๋ก ํน์ ํค ์กด์ฌ ์ฌ๋ถ ํ์ธ
3.
Get<Type> ๋ฉ์๋๋ก ๊ฐ ์กฐํ
4.
ํ์ ์ ๋ฐํ์ ์์
4. Settings System\
์ฌ์ฉ์ ์ค์ ๊ฐ์ ์ธ์
๊ฐ ์ ์งํ๊ธฐ ์ํด ์ค๊ณ๋ ์์คํ
์
๋๋ค.
ํน์ง
โข
์๊ตฌ์ (ํ์ผ/ํ๋ซํผ๋ณ) ์ ์ฅ
โข
bool, int, float, string, object ํ์
์ง์
โข
์ ์ฅ/๋ถ๋ฌ์ค๊ธฐ ๊ธฐ๋ฅ ์ ๊ณต
โข
Helper๋ฅผ ํตํ ํ๋ซํผ ๋
๋ฆฝ ๊ตฌํ
์ฌ์ฉ ์์
1.
SetSettingHelper๋ก ํ๋ซํผ๋ณ ํฌํผ ์ง์
2.
Load๋ก ๊ธฐ์กด ์ค์ ๋ถ๋ฌ์ค๊ธฐ
3.
Getter/Setter๋ก ๊ฐ ์กฐํ ๋ฐ ๋ณ๊ฒฝ
4.
Save๋ก ๋ณ๊ฒฝ ์ฌํญ ์ ์ฅ
5. DataNode System
๊ณ์ธต์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
ํน์ง
โข
๋ถ๋ชจ-์์ ๊ด๊ณ์ ํธ๋ฆฌํ ๊ตฌ์กฐ
โข
๊ฒฝ๋ก ๊ธฐ๋ฐ ๋
ธ๋ ์ ๊ทผ
โข
Variable ์์คํ
์ ํตํ ๋ค์ํ ๋ฐ์ดํฐ ํ์
์ง์
โข
๋์ ๋
ธ๋ ์์ฑ ๋ฐ ์ญ์ ๊ฐ๋ฅ
์ฌ์ฉ ์์
1.
GetOrAddNode("Root/Child")๋ก ๋
ธ๋ ์ ๊ทผ ๋๋ ์์ฑ
2.
SetData๋ก ๊ฐ ์ค์
3.
GetData๋ก ๊ฐ ์ฝ๊ธฐ
๋ฆฌ์์ค ์์คํ ์ฐ๋
โข
SettingManager๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฐ์ดํฐ ์์คํ
์ ๋ฆฌ์์ค ์์คํ
๊ณผ ์ฐ๊ณ๋ฉ๋๋ค.
โข
๋ฐ์ดํฐ ๋ก๋ฉ ๊ณผ์ :
1.
SetResourceManager๋ก ๋ฆฌ์์ค ๋งค๋์ ์ง์
2.
ReadData(AssetName) ํธ์ถ
3.
๋น๋๊ธฐ ๋ก๋ โ ๋ฐ์ดํฐ ํ์ฑ
4.
๋ก๋ ์ฑ๊ณต/์คํจ/์งํ ์ํฉ์ ์ด๋ฒคํธ๋ก ์๋ฆผ
๋ฐ์ดํฐ ์์คํ ๋น๊ตํ
์์คํ
| ์ฃผ์ ์ฉ๋ | ๊ตฌ์กฐ | ์ง์์ฑ | ํ์
์์ ์ฑ | ๋ฆฌ์์ค ์ฐ๋ |
DataTable | ๊ฒ์ ๋ฐ์ดํฐ(์์ดํ
, ์บ๋ฆญํฐ) | ํ์
์ง์ ํ
์ด๋ธ | ์ฝ๊ธฐ ์ ์ฉ(๋๊ฐ) | ๊ฐํจ(์ ๋ค๋ฆญ) | O |
Localization | ๋ค๊ตญ์ด ํ
์คํธ | Key-Value | ์ฝ๊ธฐ ์ ์ฉ(๋๊ฐ) | ๋ฌธ์์ด ๊ธฐ๋ฐ | O |
Config | ์ ์ญ ๊ฒ์ ์ค์ | Key-Value | ์ฝ๊ธฐ/๋ฐํ์ | ๊ธฐ๋ณธ ํ์
| O |
Setting | ์ฌ์ฉ์ ์ค์ | Key-Value | ์๊ตฌ ์ ์ฅ | ๊ธฐ๋ณธ+๊ฐ์ฒด ์ง๋ ฌํ | X |
DataNode | ๊ณ์ธต์ ๋์ ๋ฐ์ดํฐ | ํธ๋ฆฌ ๊ตฌ์กฐ | ๋ฉ๋ชจ๋ฆฌ ์ | Variable ๊ธฐ๋ฐ | X |












