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

Core Architecture

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๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์„ค๊ณ„๋กœ ๊ตฌ์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ปดํฌ๋„ŒํŠธ ๋“ฑ๋ก, ์ดˆ๊ธฐํ™”, ๊ทธ๋ฆฌ๊ณ  ํ—ฌํผ๋ฅผ ํ†ตํ•œ ํ™•์žฅ์„ฑ์— ๋Œ€ํ•ด ์ผ๊ด€๋œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ด€์‹ฌ์‚ฌ์˜ ๋ช…ํ™•ํ•œ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋“ˆํ™”๋˜๊ณ  ์œ ์ง€ ๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์„ ๋งŒ๋“œ๋Š” ๋ฐ์— ๊ฒฌ๊ณ ํ•œ ํ† ๋Œ€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.