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>() ์ฌ์ฉ์ผ๋ก ์ฌ๋ฐ๋ฅธ ์์ฑ ์์ ํ๋ณด






