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

Core Framework

Abstract

๐Ÿ“Œ
์ฝ”์–ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๋ชจ๋“ˆ์ด ์˜ฌ๋ผ์„œ๋Š” ๋ฐ”๋‹ฅ์ž…๋‹ˆ๋‹ค. ์„ธ ๊ฐ€์ง€๋ฟ์ž…๋‹ˆ๋‹ค โ€” ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๊ณ  ๋งค ํ”„๋ ˆ์ž„ ๋Œ๋ฆฌ๋Š” GameFrameworkEntry, ์ž‘์€ ๊ฐ์ฒด๋ฅผ ์žฌํ™œ์šฉํ•˜๋Š” ReferencePool, ๊ทธ๋ฆฌ๊ณ  ๋ฒ„์ „ ์ •๋ณด. ๊ฒŒ์ž„ ์ฝ”๋“œ๊ฐ€ ๋งค์ผ ๋งŒ์ง€๋Š” ๊ฒƒ์€ ์ด ์ค‘ ReferencePool ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
์„ธ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ฒŒ์ž„ ์ฝ”๋“œ์˜ ๊ฑฐ๋ฆฌ
๊ตฌ์„ฑ ์š”์†Œ
ํ•˜๋Š” ์ผ
๊ฒŒ์ž„ ์ฝ”๋“œ์—์„œ
GameFrameworkEntry
๋ชจ๋“ˆ ์ƒ์„ฑยท๊ฐฑ์‹ ยท์ข…๋ฃŒ
์ง์ ‘ ๋ถ€๋ฅด์ง€ ์•Š๋Š”๋‹ค. Unity ์ชฝ BaseComponent ๊ฐ€ ๋Œ€์‹  ๋ถ€๋ฅธ๋‹ค
ReferencePool
C# ๊ฐ์ฒด ์žฌํ™œ์šฉ
์ž์ฃผ ์“ด๋‹ค. ์ด๋ฒคํŠธ ์ธ์ž, ์—”ํ‹ฐํ‹ฐ ๋ฐ์ดํ„ฐ
Version
ํ”„๋ ˆ์ž„์›Œํฌยท๊ฒŒ์ž„ ๋ฒ„์ „ ๋ฌธ์ž์—ด
๊ฐ€๋”. ๋ฒ„์ „ ํ‘œ์‹œ, ์„œ๋ฒ„ ํ˜ธํ™˜์„ฑ ๊ฒ€์‚ฌ
ํ•œ ํ”„๋ ˆ์ž„์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋‚˜
ํ”„๋ ˆ์ž„์›Œํฌ ์ „์ฒด๊ฐ€ ๋„๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค ์ด ํ•œ ์ค„ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
// BaseComponent.cs (Unity ๋ž˜ํผ) private void Update() { GameFrameworkEntry.Update(Time.deltaTime, Time.unscaledDeltaTime); }
C#
๋ณต์‚ฌ
BaseComponent ๊ฐ€ ๋ถ™์€ GameObject ๊ฐ€ ์”ฌ์— ์—†์œผ๋ฉด ์ด๋ฒคํŠธ๋„, FSM ๋„, ์—”ํ‹ฐํ‹ฐ๋„ ์ „ํ˜€ ์›€์ง์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋งํ•˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์‹ฌ์žฅ์€ MonoBehaviour ํ•˜๋‚˜์˜ Update ์ด๊ณ , ๋‚˜๋จธ์ง€๋Š” ์ „๋ถ€ ํ‰๋ฒ”ํ•œ C# ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฝ”์–ด๋ฅผ Unity ์—†์ด ์ฝ˜์†” ํ”„๋กœ๊ทธ๋žจ์—์„œ while ๋ฃจํ”„๋กœ ๋Œ๋ฆฌ๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(์„œ๋ฒ„ ๋กœ์ง ์žฌ์‚ฌ์šฉ, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ).
๊ฒŒ์ž„ ์ข…๋ฃŒ ์‹œ์—๋Š” GameFrameworkEntry.Shutdown() ์ด ๋ชจ๋“  ๋ชจ๋“ˆ์„ ์—ญ์ˆœ์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ , ๋งˆ์ง€๋ง‰์— ReferencePool.ClearAll() ๋กœ ํ’€์„ ๋น„์›๋‹ˆ๋‹ค.
ToyboxNightmare ์—์„œ์˜ ReferencePool
// ๊บผ๋‚ผ ๋•Œ: new ๋Œ€์‹  EnemyData data = ReferencePool.Acquire<EnemyData>(); // ๋Œ๋ ค์ค„ ๋•Œ: ๋ฒ„๋ฆฌ๋Š” ๋Œ€์‹  ReferencePool.Release(data); // ๋‚ด๋ถ€์—์„œ data.Clear() ๊ฐ€ ๋ถˆ๋ฆฐ๋‹ค
C#
๋ณต์‚ฌ
์ž์„ธํ•œ ๊ทœ์น™๊ณผ ์˜ˆ์ œ์˜ ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ ํŒจํ„ด์€ Reference Pooling (๋ ˆํผ๋Ÿฐ์Šค ํ’€๋ง) ์— ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ โ€” ์–ด๋””๊นŒ์ง€ ์—ด๋ ค ์žˆ๋‚˜
โ€ข
์ƒˆ ๋ชจ๋“ˆ์€ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. GameFrameworkModule ์ด internal ์ž…๋‹ˆ๋‹ค. GetModule<T>() ๋„ GameFramework. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ƒˆ ์ „์—ญ ์‹œ์Šคํ…œ์€ Unity ์ชฝ์—์„œ GameFrameworkComponent ๋ฅผ ์ƒ์†ํ•ด ๋งŒ๋“ญ๋‹ˆ๋‹ค.
โ€ข
๋ฒ„์ „์€ ๊ฐˆ์•„ ๋ผ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Version.IVersionHelper ๋ฅผ ๊ตฌํ˜„ํ•ด BaseComponent ์˜ Version Helper Type Name ์— ์ง€์ •ํ•˜๋ฉด Version.GameVersion ์ด ๋‚ด ๊ฒŒ์ž„์˜ ๋ฒ„์ „์„ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.
โ€ข
์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GameFrameworkLinkedList<T> ๋Š” ๋…ธ๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ผ ์‚ฝ์ž…ยท์‚ญ์ œ๊ฐ€ ์žฆ์€ ๊ณณ์—์„œ ๊ฐ€๋น„์ง€๊ฐ€ ์—†๊ณ , GameFrameworkMultiDictionary<TKey, TValue> ๋Š” "ํ‚ค ํ•˜๋‚˜์— ๊ฐ’ ์—ฌ๋Ÿฌ ๊ฐœ"๊ฐ€ ํ•„์š”ํ•  ๋•Œ Dictionary<TKey, List<TValue>> ๋Œ€์‹  ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”์–ด ํ”„๋ ˆ์ž„์›Œํฌ (Core Framework)

๊ด€๋ จ ์†Œ์Šค ํŒŒ์ผ
โ€ข
GameFramework/Base/DataStruct/TypeNamePair.cs
โ€ข
GameFramework/Base/EventPool/BaseEventArgs.cs
โ€ข
GameFramework/Base/GameFrameworkEntry.cs
โ€ข
GameFramework/Base/GameFrameworkEventArgs.cs
โ€ข
GameFramework/Base/GameFrameworkLinkedList.cs
โ€ข
GameFramework/Base/GameFrameworkLinkedListRange.cs
โ€ข
GameFramework/Base/GameFrameworkMultiDictionary.cs
โ€ข
GameFramework/Base/ReferencePool/IReference.cs
โ€ข
GameFramework/Base/ReferencePool/ReferencePool.ReferenceCollection.cs
โ€ข
GameFramework/Base/ReferencePool/ReferencePool.cs
โ€ข
GameFramework/Base/ReferencePool/ReferencePoolInfo.cs
โ€ข
GameFramework/Base/Version/Version.IVersionHelper.cs
โ€ข
GameFramework/Base/Version/Version.cs
โ€ข
GameFramework/Sound/ResetSoundAgentEventArgs.cs
์ฝ”์–ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” GameFramework ์•„ํ‚คํ…์ฒ˜์˜ ๊ธฐ๋ฐ˜์„ ํ˜•์„ฑํ•˜๋ฉฐ, ๋ชจ๋“ˆ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•˜๋ฉฐ, ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ž‘๋™์„ ์กฐ์œจํ•˜๋Š” ํ•„์ˆ˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ตฌ์„ฑ ์š”์†Œ๋“ค์€ ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์˜ ๋ชจ๋“  ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์„ ๋’ท๋ฐ›์นจํ•˜๋ฉฐ, ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „๋ฐ˜์—์„œ ์ผ๊ด€๋œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ํ™•๋ฆฝํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

์ฝ”์–ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
1.
GameFrameworkEntry โ€“ ์ค‘์•™ ์ง„์ž…์ ์ด์ž ๋ชจ๋“ˆ ์กฐ์ •์ž
2.
ReferencePool โ€“ ๊ฐ์ฒด ํ’€๋ง๊ณผ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” ์‹œ์Šคํ…œ
3.
Version โ€“ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๊ฒŒ์ž„ ๋ฒ„์ „์„ ์ถ”์ ํ•˜๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ

๋ชจ๋“ˆ ์•„ํ‚คํ…์ฒ˜

GameFrameworkEntry

GameFrameworkEntry ํด๋ž˜์Šค๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ „์ฒด์˜ ์ค‘์•™ ํ—ˆ๋ธŒ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
์ด ํด๋ž˜์Šค๋Š” ๋ชจ๋“  ํ”„๋ ˆ์ž„์›Œํฌ ๋ชจ๋“ˆ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋ชจ๋“ˆ ๋“ฑ๋ก ๋ฐ ๊ฒ€์ƒ‰ โ€“ ์š”์ฒญ ์‹œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ
โ€ข
๋ชจ๋“ˆ ์—…๋ฐ์ดํŠธ โ€“ ๋งค ํ”„๋ ˆ์ž„ ์šฐ์„ ์ˆœ์œ„ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ ๋ชจ๋“ˆ์˜ Update ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
โ€ข
๋ชจ๋“ˆ ์ข…๋ฃŒ โ€“ ์šฐ์„ ์ˆœ์œ„ ์—ญ์ˆœ์œผ๋กœ Shutdown ํ˜ธ์ถœํ•˜์—ฌ ์ •๋ฆฌ
์ง„์ž…์ ์€ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค ์š”์ฒญ์„ ๊ตฌ์ฒด ํด๋ž˜์Šค ๊ตฌํ˜„๊ณผ ์ž๋™ ๋งคํ•‘ํ•˜์—ฌ, ๊น”๋”ํ•œ ์˜์กด์„ฑ ํ•ด๊ฒฐ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋“ˆ ๊ฒ€์ƒ‰ ์˜ˆ์‹œ:
// ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ƒ์„ฑ IResourceManager resourceManager = GameFrameworkEntry.GetModule<IResourceManager>();
C#
๋ณต์‚ฌ
GetModule() ํ˜ธ์ถœ ์‹œ ๊ณผ์ •:
1.
T๊ฐ€ GameFramework ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค์ธ์ง€ ํ™•์ธ
2.
์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์—์„œ 'I' ์ ‘๋‘์‚ฌ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๊ตฌ์ฒด ํด๋ž˜์Šค ์ด๋ฆ„ ์ƒ์„ฑ
3.
๋ฆฌํ”Œ๋ ‰์…˜์œผ๋กœ ๋ชจ๋“ˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ์ƒ์„ฑ
4.
์šฐ์„ ์ˆœ์œ„์— ๋งž๊ฒŒ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ์‚ฝ์ž…

ReferencePool์„ ์ด์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

ReferencePool์€ ํšจ์œจ์ ์ธ ๊ฐ์ฒด ํ’€๋ง ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•˜์—ฌ:
โ€ข
GC ๋ถ€๋‹ด ๊ฐ์†Œ (๊ฐ์ฒด ์žฌ์‚ฌ์šฉ)
โ€ข
ํƒ€์ž…๋ณ„ ํ’€ ๊ด€๋ฆฌ
โ€ข
์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•œ ํš๋“/๋ฐ˜ํ™˜
โ€ข
๊ฐ์ฒด ์‚ฌ์šฉ ํ†ต๊ณ„ ์ถ”์ 
๊ฐ์ฒด ํ’€์— ๋“ค์–ด๊ฐ€๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋Š” IReference ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋Š” Clear() ๋ฉ”์„œ๋“œ ํ•˜๋‚˜๋ฅผ ์ •์˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ ์‹œ ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ ํŒจํ„ด ์˜ˆ์‹œ:
MyEventArgs eventArgs = ReferencePool.Acquire<MyEventArgs>(); // ๊ฐ์ฒด ์‚ฌ์šฉ ... ReferencePool.Release(eventArgs); // Clear() ์ž๋™ ํ˜ธ์ถœ
C#
๋ณต์‚ฌ
๊ฐ ํƒ€์ž…๋ณ„ ๊ฐ์ฒด ํ’€์€ ReferenceCollection์„ ๊ฐ€์ง€๊ณ , ๋‚ด๋ถ€ ํ์— ๋ฏธ์‚ฌ์šฉ ์ธ์Šคํ„ด์Šค๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด ์ƒˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ ์‹œ์Šคํ…œ

Version ์ปดํฌ๋„ŒํŠธ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฒŒ์ž„ ๋ฒ„์ „์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
โ€ข
GameFrameworkVersion โ€“ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฒ„์ „(๊ณ ์ • ๋ฌธ์ž์—ด)
โ€ข
GameVersion โ€“ ๊ฒŒ์ž„ ๋ฒ„์ „(ํ—ฌํผ๋ฅผ ํ†ตํ•ด ์ œ๊ณต)
โ€ข
InternalGameVersion โ€“ ํ˜ธํ™˜์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์ •์ˆ˜ ๋ฒ„์ „
๊ฒŒ์ž„์€ IVersionHelper ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ž์ฒด ๋ฒ„์ „ ์ •๋ณด๋ฅผ ๋…ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ปค์Šคํ…€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

์ฝ”์–ด ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ˆ˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
๋ชฉ์ 
์ฃผ์š” ๊ธฐ๋Šฅ
GameFrameworkLinkedList<T>
ํšจ์œจ์ ์ธ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ
๋…ธ๋“œ ์บ์‹ฑ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๊ฐ์†Œ
GameFrameworkLinkedListRange<T>
์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ตฌ๊ฐ„ ํ‘œํ˜„
ํŠน์ • ๊ตฌ๊ฐ„ ๋…ธ๋“œ ์—ด๊ฑฐ ์ง€์›
GameFrameworkMultiDictionary<TKey,TValue>
ํ‚ค๋‹น ์—ฌ๋Ÿฌ ๊ฐ’ ์ €์žฅ
์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ตฌ๊ฐ„ ์‚ฌ์šฉ
์ด ์ž๋ฃŒ๊ตฌ์กฐ๋“ค์€ ๊ฐ์ฒด ํ’€, ์ด๋ฒคํŠธ ์‹œ์Šคํ…œ, ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ๋“ฑ ์ƒ์œ„ ์‹œ์Šคํ…œ์˜ ๊ธฐ๋ฐ˜์ด ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ ์ˆ˜๋ช… ์ฃผ๊ธฐ

1.
์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™” โ€“ GetModule<T>() ํ˜ธ์ถœ ์‹œ ์ƒ์„ฑ, ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ •๋ ฌ
2.
์—…๋ฐ์ดํŠธ โ€“ ๋งค ํ”„๋ ˆ์ž„ ์šฐ์„ ์ˆœ์œ„ ์ˆœ์„œ๋Œ€๋กœ Update ํ˜ธ์ถœ
3.
์ข…๋ฃŒ โ€“ ๊ฒŒ์ž„ ์ข…๋ฃŒ ์‹œ ์—ญ์ˆœ์œผ๋กœ Shutdown ํ˜ธ์ถœ
์ด ์ˆœ์„œ๋Š” ์˜์กด์„ฑ์„ ๊ฐ€์ง„ ๋ชจ๋“ˆ ๊ฐ„ ์˜ฌ๋ฐ”๋ฅธ ์ดˆ๊ธฐํ™”์™€ ์ •๋ฆฌ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ฒ” ์‚ฌ๋ก€

๋ชจ๋“ˆ ๊ตฌํ˜„

โ€ข
(ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด๋ถ€ ๊ทœ์น™) ๋ชจ๋“ˆ์€ I์ด๋ฆ„ ์ธํ„ฐํŽ˜์ด์Šค + GameFrameworkModule ์„ ์ƒ์†ํ•œ ๊ฐ™์€ ์ด๋ฆ„์˜ ํด๋ž˜์Šค ํ•œ ์Œ์œผ๋กœ ๋งŒ๋“ ๋‹ค
โ€ข
์ ์ ˆํ•œ Priority ๊ฐ’ ์„ค์ •
โ€ข
Update์™€ Shutdown ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
โ€ข
๋‹จ, GameFrameworkModule ์€ internal ์ด๋ผ ๊ฒŒ์ž„ ์ฝ”๋“œ์—์„œ๋Š” ์ƒˆ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค. ์ƒˆ ์ „์—ญ ์‹œ์Šคํ…œ์€ Unity ์ชฝ์˜ GameFrameworkComponent ๋ฅผ ์ƒ์†ํ•ด ๋งŒ๋“ ๋‹ค

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

โ€ข
์ž์ฃผ ์ƒ์„ฑ/ํŒŒ๊ดด๋˜๋Š” ๊ฐ์ฒด์— IReference ๊ตฌํ˜„
โ€ข
์‚ฌ์šฉ ํ›„ ๋ฐ˜๋“œ์‹œ ReferencePool.Release() ํ˜ธ์ถœ
โ€ข
Clear()์—์„œ ์ƒํƒœ ์ดˆ๊ธฐํ™”

๋ชจ๋“ˆ ์˜์กด์„ฑ

โ€ข
GameFrameworkEntry.GetModule<T>() ์‚ฌ์šฉ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ์ƒ์„ฑ ์ˆœ์„œ ํ™•๋ณด