Abstract
ํ๋ ์์ํฌ๊ฐ ์ด๋ค ์์๋ก ์ผ์ง๊ณ , ๋ชจ๋๋ค์ด ์ด๋ค ๊ณตํต ๋ชจ์(Component โ Manager โ Helper)์ ๊ฐ๋์ง ์ค๋ช
ํ๋ ๋ฌธ์์
๋๋ค. ๊ฐ๋ณ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ฝ๋ค๊ฐ "์ด ํด๋์ค๋ค์ด ์ ์ธ ๊ฒน์ด์ง?" ์ถ์ ๋ ๋์์ค๋ฉด ๋ฉ๋๋ค.
์ค๋ฌด์์ ์ด ๋ฌธ์๊ฐ ํ์ํ ์๊ฐ
โข
๋ด ์ปดํฌ๋ํธ์ Awake ์์ ๋ค๋ฅธ ํ๋ ์์ํฌ ์ปดํฌ๋ํธ๋ฅผ ์ฐพ์๋๋ฐ null ์ด ๋์ฌ ๋ โ ๋ฑ๋ก์ Awake, ์ฐธ์กฐ๋ Start ์
๋๋ค.
โข
ํ๋ ์์ํฌ์ ์๋ ์ ์ญ ์์คํ
(์
์ , ์ธ์ด๋ธ ๋ฑ)์ ๋ถ์ด๊ณ ์ถ์ ๋
โข
์ํฐํฐ์ UI ํผ์ด ์ Entity+EntityLogic, UIForm+UIFormLogic ์ผ๋ก ๋์ฉ ๋๋์ด ์๋์ง ๊ถ๊ธํ ๋ โ ์์ชฝ์ ํ๋ ์์ํฌ๊ฐ ๊ด๋ฆฌํ๋ ๊ป๋ฐ๊ธฐ, ๋ค์ชฝ์ด ์ฐ๋ฆฌ๊ฐ ์ฐ๋ ๋ก์ง์
๋๋ค.
ToyboxNightmare ์์๋
GameFramework.prefab ์ ๋ฃจํธ์ BaseComponent, ์์ GameObject 20๊ฐ์ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ํ๋์ฉ ๋ถ์ด ์์ต๋๋ค. ์ด ๋ฌธ์์ ์ปดํฌ๋ํธ ํ์๋ ์ผ๋ถ๊ฐ ๋น ์ ธ ์์ผ๋ ์ ์ฒด ๋ชฉ๋ก์
GameEntry์ ์ปดํฌ๋ํธ ๊ด๋ฆฌ ์ ํ๋ฅผ ๋ณด์ธ์.
ํ์ฅํ๋ ค๋ฉด โ ์ ์ ์ญ ์์คํ
์ถ๊ฐ
์ฝ์ด ๋ชจ๋(GameFrameworkModule)์ internal ์ด๋ผ ๋ฐ์์ ๋ง๋ค ์ ์์ต๋๋ค. ๋์ ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด๊ฒ์ด ์ ์ผํ ํ์ฅ ๊ฒฝ๋ก์
๋๋ค.
public sealed class AchievementComponent : GameFrameworkComponent
{
private EventComponent mEvent;
protected override void Awake()
{
base.Awake(); // ์ฌ๊ธฐ์ GameEntry ์ ๋ฑ๋ก๋๋ค. ๋นผ๋ฉด GetComponent ๋ก ์์ ์ฐพ์ง ๋ชปํ๋ค
}
private void Start()
{
// ๋ค๋ฅธ ์ปดํฌ๋ํธ ์ฐธ์กฐ๋ Start ์์ ์ก๋๋ค. Awake ๋ผ๋ฆฌ๋ ์์๊ฐ ๋ณด์ฅ๋์ง ์๋๋ค
mEvent = GameEntry.GetComponent<EventComponent>();
}
}
C#
๋ณต์ฌ
์ด ์คํฌ๋ฆฝํธ๋ฅผ GameFramework.prefab ์ ์ ์์ GameObject ์ ๋ถ์ด๋ฉด GameEntry.GetComponent<AchievementComponent>() ๋ก ์ด๋์๋ ๊บผ๋ผ ์ ์์ต๋๋ค.
์ด ์๋์
์์ ๋ค๋ฅธ ์ : ๋ฆฌ์์ค ์ชฝ ํฌํผ(DefaultResourceHelper, DefaultLoadResourceAgentHelper)๋ ์์ต๋๋ค. ๋ฆฌ์์ค ๋ก๋ฉ์ด Addressables ๊ธฐ๋ฐ ResourceManager ํ๋๋ก ๋์ฒด๋๊ธฐ ๋๋ฌธ์
๋๋ค.
์ฝ์ด ์ํคํ ์ฒ
๊ด๋ จ ์์ค ํ์ผ
โข
GameFramework.prefab
โข
GameFramework.prefab.meta
โข
Scripts/Runtime/Base/BaseComponent.cs
โข
Scripts/Runtime/Base/GameEntry.cs
โข
Scripts/Runtime/Entity/Entity.cs
โข
Scripts/Runtime/Entity/EntityLogic.cs
โข
Scripts/Runtime/UI/UIForm.cs
โข
Scripts/Runtime/UI/UIFormLogic.cs
โข
Scripts/Runtime/Utility/DefaultLogHelper.cs
โข
Scripts/Runtime/Utility/Log.cs
Unity Game Framework์ ์ฝ์ด ์ํคํ
์ฒ๋ ๋ค๋ฅธ ๋ชจ๋ ์์คํ
๋ค์ด ๊ตฌ์ถ๋๋ ๊ธฐ์ด ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ํ์ด์ง๋ ํ๋ ์์ํฌ์ ๊ทผ๊ฐ์ ์ด๋ฃจ๋ ๊ธฐ๋ณธ์ ์ธ ์ํคํ
์ฒ ํจํด, ์ด๊ธฐํ ๊ณผ์ , ๊ทธ๋ฆฌ๊ณ ์ปดํฌ๋ํธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค๋ช
ํฉ๋๋ค. ๋ฆฌ์์ค ๊ด๋ฆฌ๋ UI ์์คํ
๊ณผ ๊ฐ์ ํน์ ์์คํ
์ ๋ํ ์ ๋ณด๋ ํด๋น ์ ์ฉ ํ์ด์ง(๋ฆฌ์์ค ๊ด๋ฆฌ ์์คํ
, UI ๋ฐ ์ํฐํฐ ์์คํ
)๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ๋ ์์ํฌ ๊ฐ์
Unity Game Framework๋ ์ ์ GameEntry ํด๋์ค๋ฅผ ์ค์ฌ์ผ๋ก ํ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ
์ฒ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ํด๋์ค๋ ๋ชจ๋ ํ๋ ์์ํฌ ๊ธฐ๋ฅ์ ๋ํ ์ค์ ์ ๊ทผ ์ง์ ์ญํ ์ ํฉ๋๋ค. ํ๋ ์์ํฌ๋ ๋ค์์ ํต์ฌ ์์น์ ๋ฐ๋ผ ์ค๊ณ๋์์ต๋๋ค:
โข
๋ชจ๋ํ๋ฅผ ์ํ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ค๊ณ
โข
Unity ์ ์ฉ ์ฝ๋์ ์ฝ์ด ๊ฒ์ ํ๋ ์์ํฌ ๋ก์ง์ ๋ถ๋ฆฌ
โข
ํ์ฅ์ ์ํ ์ผ๊ด๋ ํฌํผ ํจํด
โข
์ ์ ์๋ ์ปดํฌ๋ํธ ๋ผ์ดํ์ฌ์ดํด
์ด์ ์ด๋ฌํ ์์น๋ค์ด ์ฝ์ด ์ํคํ
์ฒ์ ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
GameEntry์ BaseComponent
์ฝ์ด ์ํคํ
์ฒ๋ ๋ ๊ฐ์ง ์ฃผ์ ํด๋์ค์ธ GameEntry์ BaseComponent๋ฅผ ์ค์ฌ์ผ๋ก ์ ๊ฐ๋ฉ๋๋ค.
GameEntry
GameEntry๋ ๋ชจ๋ ํ๋ ์์ํฌ ๊ธฐ๋ฅ์ ๋ํ ์ค์ ์ ๊ทผ ์ง์ ์ญํ ์ ํ๋ ์ ์ ํด๋์ค์
๋๋ค. ์ด ํด๋์ค๋ ์ปดํฌ๋ํธ์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ ์งํ๊ณ , ์ด๋ฅผ ์ ๊ทผํ ์ ์๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ชจ๋ ํ๋ ์์ํฌ ์ปดํฌ๋ํธ๋ ์ด๊ธฐํ ์ค์ GameEntry์ ๋ฑ๋ก๋๋ฉฐ, ๊ทธ ํ ์ด๋ค ์คํฌ๋ฆฝํธ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ๊ทผํ ์ ์์ต๋๋ค:
SomeComponent component = GameEntry.GetComponent<SomeComponent>();
C#
๋ณต์ฌ
GetComponent<T>() ๋ฉ์๋๋ ๋ฑ๋ก๋ ์ปดํฌ๋ํธ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ํ์ํ์ฌ ์์ฒญ๋ ํ์
๊ณผ ์ผ์นํ๋ ๊ฒ์ ์ฐพ์ต๋๋ค.
BaseComponent
BaseComponent๋ ์ฝ์ด ํ๋ ์์ํฌ๋ฅผ ์ด๊ธฐํํ๋ ๋ฃจํธ MonoBehaviour ์ปดํฌ๋ํธ์
๋๋ค. ์ด ํด๋์ค๋ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ์ํํฉ๋๋ค:
โข
ํ์ ํฌํผ(text, version, logging ๋ฑ) ์ค์
โข
์ ์ญ ์ค์ (frame rate, ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ ๋ฑ) ๊ตฌ์ฑ
โข
ํ๋ ์์ํฌ ์
๋ฐ์ดํธ ๋ฃจํ ์์
BaseComponent๋ ๋ฐ๋์ ์ด๊ธฐ ์ฌ์ ์กด์ฌํด์ผ ํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก GameFramework.prefab์ ์ผ๋ถ์
๋๋ค.
์ปดํฌ๋ํธ ๋ฑ๋ก๊ณผ ๋ผ์ดํ์ฌ์ดํด
ํ๋ ์์ํฌ์ ์ปดํฌ๋ํธ๋ค์ ์ผ๊ด๋ ๋ฑ๋ก ํจํด๊ณผ ๋ผ์ดํ์ฌ์ดํด์ ๋ฐ๋ฆ
๋๋ค:
๊ฐ ์ปดํฌ๋ํธ๋
โข
Awake() ์์ ์ GameEntry์ ์์ ์ ๋ฑ๋ก
โข
Start()์์ ๋ด๋ถ ์์คํ
์ด๊ธฐํ
โข
๋งค ํ๋ ์ ์
๋ฐ์ดํธ์์ ์์ ์ ์์คํ
๊ฐฑ์
โข
ํ๊ดด๋ ๋ ๋ฆฌ์์ค ์ ๋ฆฌ
์ด ์ผ๊ด๋ ๋ผ์ดํ์ฌ์ดํด์ ์ฌ๋ฐ๋ฅธ ์ด๊ธฐํ ์์์ ๋ฆฌ์์ค ๊ด๋ฆฌ๊ฐ ๋ณด์ฅ๋๋๋ก ํฉ๋๋ค.
ํ๋ ์์ํฌ ๊ตฌ์กฐ
์ ์ฒด ํ๋ ์์ํฌ๋ ๊ฒ์ ๊ธฐ๋ฅ์ ํน์ ์ธก๋ฉด์ ๋ด๋นํ๋ ์ปดํฌ๋ํธ๋ค์ ์งํฉ์ผ๋ก ์กฐ์ง๋์ด ์์ต๋๋ค.
๊ฐ ์ปดํฌ๋ํธ๋ ๋งค๋์ ํด๋์ค์ ํฌํผ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋์๋๋ ์์คํ
์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
ํฌํผ ํจํด
ํ๋ ์์ํฌ ์ ๋ฐ์ ๊ฑธ์ณ ์ฌ์ฉ๋๋ ํต์ฌ ์ํคํ
์ฒ ํจํด์ ํฌํผ ํจํด(Helper Pattern) ์
๋๋ค. ์ด ํจํด์ ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ ๊ตฌํ์ ์ ๊ณตํ๋ฉด์๋ ์ปค์คํฐ๋ง์ด์ง๊ณผ ํ์ฅ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
ํ๋ ์์ํฌ์์๋ ์ด ํจํด์ด ์ผ๊ด๋๊ฒ ์ ์ฉ๋ฉ๋๋ค:
โข
๊ฐ ์ปดํฌ๋ํธ๋ ๊ด๋ จ๋ ๋งค๋์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง
โข
๊ฐ ๋งค๋์ ๋ ํ๋ซํผ ํนํ ๊ตฌํ์ ์ํด ํฌํผ ์ธํฐํ์ด์ค ์ฌ์ฉ
โข
๋ชจ๋ ํฌํผ์ ๋ํด ๊ธฐ๋ณธ ๊ตฌํ ์ ๊ณต
โข
๊ธฐ๋ณธ ๊ตฌํ์ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ์ปค์คํ
ํฌํผ ๊ตฌํ ๊ฐ๋ฅ
์: DefaultLogHelper, DefaultEntityHelper ๋ฑ
์ด๊ธฐํ ํ๋ฆ
ํ๋ ์์ํฌ๋ ํน์ ์ด๊ธฐํ ์์๋ฅผ ๋ฐ๋ฆ
๋๋ค:
โข
์ด๊ธฐํ๋ BaseComponent์์ ์์๋๋ฉฐ, ์ฌ๊ธฐ์ ์ฝ์ด ํ๋ ์์ํฌ์ ๋ชจ๋ ํฌํผ๊ฐ ์ค์ ๋ฉ๋๋ค.
โข
์ดํ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค์ด ์์ ์ ๋ฑ๋กํ๊ณ ์๋ธ์์คํ
์ ์ด๊ธฐํํฉ๋๋ค.
์ํฐํฐ ๋ฐ UI ๋ก์ง ํจํด
์ํฐํฐ์ UI ํผ์ ๊ฒฝ์ฐ ํ๋ ์์ํฌ๋ ์ผ๊ด๋ ํจํด์ ์ฌ์ฉํฉ๋๋ค:
์ด ํจํด์ ํ๋ ์์ํฌ ํนํ ๋์(Entity/UIForm)๊ณผ ๊ฒ์ ํนํ ๋ก์ง(EntityLogic/UIFormLogic)์ ๋ถ๋ฆฌํฉ๋๋ค. ๊ฐ๋ฐ์๋ ๋ก์ง ํด๋์ค๋ฅผ ํ์ฅํ์ฌ ๊ฒ์ ์ ์ฉ ๋์์ ๊ตฌํํ๊ณ , ํ๋ ์์ํฌ๋ ๋ผ์ดํ์ฌ์ดํด๊ณผ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๋ด๋นํฉ๋๋ค.
ํ๋ ์์ํฌ ํ๋ฆฌํน ๊ตฌ์กฐ
ํ๋ ์์ํฌ ์ ์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก GameFramework.prefab์ ํตํด ์ด๊ธฐํ๋๋ฉฐ, ์ด ์์๋ ๋ชจ๋ ์ฝ์ด ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ด๊ธฐ ์ฌ์ ์ด ํ๋ฆฌํน์ ํฌํจ์ํค๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ปดํฌ๋ํธ ๊ด๊ณ ํ
์ปดํฌ๋ํธ | ์ค๋ช
| ์ฃผ์ ์ฑ
์ |
BaseComponent | ์ฝ์ด ์ด๊ธฐํ | ํ๋ ์์ํฌ ์ด๊ธฐํ, ์ ์ญ ์ค์ |
ResourceComponent | ์์
๊ด๋ฆฌ | ๋ฆฌ์์ค ๋ก๋ฉ, ์บ์ฑ, ์
๋ฐ์ดํธ |
UIComponent | UI ๊ด๋ฆฌ | UI ํผ ์์ฑ, ํ์, ๊ด๋ฆฌ |
EntityComponent | ์ํฐํฐ ๊ด๋ฆฌ | ๊ฒ์ ์ํฐํฐ ์์ฑ, ์คํฐ, ๊ด๋ฆฌ |
SceneComponent | ์ฌ ๊ด๋ฆฌ | ์ฌ ๋ก๋ฉ ๋ฐ ์ ํ |
DebuggerComponent | ๋๋ฒ๊น
๋๊ตฌ | ๋ฐํ์ ๋๋ฒ๊น
์ธํฐํ์ด์ค |
DataTableComponent | ๊ฒ์ ๋ฐ์ดํฐ | ๊ตฌ์กฐํ๋ ๊ฒ์ ๋ฐ์ดํฐ ๋ก๋ฉ ๋ฐ ์ ๊ทผ |
LocalizationComponent | ํ์งํ | ๋ค๊ตญ์ด ์ง์ |
ConfigComponent | ์ค์ | ๊ฒ์ ์ค์ ๋ฐ ๊ตฌ์ฑ |
ObjectPoolComponent | ์ค๋ธ์ ํธ ํ๋ง | ์์ฃผ ์ฌ์ฉ๋๋ ์ค๋ธ์ ํธ ์ฑ๋ฅ ์ต์ ํ |
ReferencePoolComponent | ๋ ํผ๋ฐ์ค ํ๋ง | ๋ ํผ๋ฐ์ค ํ์
๋ฉ๋ชจ๋ฆฌ ์ต์ ํ |
NetworkComponent | ๋คํธ์ํน | ๋คํธ์ํฌ ํต์ |
DownloadComponent | ํ์ผ ๋ค์ด๋ก๋ | ์ธ๋ถ ํ์ผ ๋ค์ด๋ก๋ |
WebRequestComponent | ์น ์์ฒญ | HTTP ์น ์์ฒญ |
FileSystemComponent | ํ์ผ I/O | ํ์ผ ์์คํ
์ ๊ทผ |
SettingComponent | ํ๋ ์ด์ด ์ค์ | ์ง์์ ์ธ ํ๋ ์ด์ด ํ๊ฒฝ ์ค์ |
์์ฝ
Unity Game Framework์ ์ฝ์ด ์ํคํ
์ฒ๋ GameEntry๋ฅผ ์ค์ ์ ๊ทผ ์ง์ ์ผ๋ก, BaseComponent๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ค๊ณ๋ก ๊ตฌ์ถ๋์ด ์์ต๋๋ค. ํ๋ ์์ํฌ๋ ์ปดํฌ๋ํธ ๋ฑ๋ก, ์ด๊ธฐํ, ๊ทธ๋ฆฌ๊ณ ํฌํผ๋ฅผ ํตํ ํ์ฅ์ฑ์ ๋ํด ์ผ๊ด๋ ํจํด์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ์ํคํ
์ฒ๋ ๊ด์ฌ์ฌ์ ๋ช
ํํ ๋ถ๋ฆฌ๋ฅผ ํตํด ๋ชจ๋ํ๋๊ณ ์ ์ง ๋ณด์ ๊ฐ๋ฅํ ๊ฒ์์ ๋ง๋๋ ๋ฐ์ ๊ฒฌ๊ณ ํ ํ ๋๋ฅผ ์ ๊ณตํฉ๋๋ค.












