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

Entity Manager

Abstract

๐Ÿ“Œ
Entity Manager ๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ์žฅ๋ถ€์ž…๋‹ˆ๋‹ค. "์ง€๊ธˆ Id ๋ช‡ ๋ฒˆ์ด ์‚ด์•„ ์žˆ๊ณ , ์–ด๋А ๊ทธ๋ฃน์— ์†ํ•˜๋ฉฐ, ์–ด๋–ค ์ƒํƒœ์ธ๊ฐ€"๋ฅผ ๊ธฐ๋กํ•˜๊ณ , ๊ทธ ๊ธฐ๋ก์— ๋”ฐ๋ผ ๋กœ์ง์˜ OnInit / OnShow / OnHide ๋ฅผ ์ •ํ•ด์ง„ ์ˆœ์„œ๋กœ ๋”ฑ ํ•œ ๋ฒˆ์”ฉ ๋ถˆ๋Ÿฌ ์ค๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์ฝ”๋“œ์—์„œ ๊ฒช๋Š” ์—”ํ‹ฐํ‹ฐ ๊ด€๋ จ ์˜ˆ์™ธ๋Š” ๊ฑฐ์˜ ์ „๋ถ€ ์ด ์žฅ๋ถ€์™€ ์–ด๊ธ‹๋‚œ ์š”์ฒญ์„ ํ–ˆ์„ ๋•Œ ๋‚ฉ๋‹ˆ๋‹ค.
์—”ํ‹ฐํ‹ฐ์˜ ์ผ์ƒ โ€” ์ƒํƒœ์™€ ์ฝœ๋ฐฑ
stateDiagram-v2
    [*] --> Loading: ShowEntity
    Loading --> Inited: ์—์…‹ ๋„์ฐฉ โ†’ OnInit (์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒˆ๊ฒƒ์ผ ๋•Œ๋งŒ)
    Inited --> Showed: OnShow
    Showed --> Hidden: HideEntity โ†’ OnHide
    Hidden --> Recycled: ๋‹ค์Œ Update โ†’ OnRecycle
    Recycled --> [*]: ์ธ์Šคํ„ด์Šค๋Š” ํ’€๋กœ
    Loading --> [*]: ๋กœ๋“œ ์ค‘ HideEntity โ†’ ๋„์ฐฉํ•˜๋ฉด ๋ฐ”๋กœ ๋ฒ„๋ฆผ
Mermaid
๋ณต์‚ฌ
์—ฌ๊ธฐ์„œ ๊ฒŒ์ž„ ์ฝ”๋“œ๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์€ HideEntity ๊ฐ€ ๋‘ ๋‹จ๊ณ„๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค. ํ˜ธ์ถœ ์ฆ‰์‹œ OnHide ๊ฐ€ ๋ถˆ๋ฆฌ๊ณ  ์žฅ๋ถ€์—์„œ ์ง€์›Œ์ง€์ง€๋งŒ(Hidden), ์ธ์Šคํ„ด์Šค๊ฐ€ ํ’€๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์€ ๋‹ค์Œ ํ”„๋ ˆ์ž„์˜ Update ์ž…๋‹ˆ๋‹ค(Recycled). ๊ทธ ์‚ฌ์ด ํ•œ ํ”„๋ ˆ์ž„ ๋™์•ˆ GameObject ๋Š” ์•„์ง ๊ทธ ์ž๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.
์ž์ฃผ ๋งŒ๋‚˜๋Š” ์˜ˆ์™ธ์™€ ์›์ธ
๋ฉ”์‹œ์ง€
์›์ธ
ToyboxNightmare ์˜ ๋Œ€์‘
Entity id 'โ€ฆ' is already exist.
์‚ด์•„ ์žˆ๋Š” Id ๋กœ ๋˜ ShowEntity. Id ๋Š” ํ˜ธ์ถœ์ž๊ฐ€ ์ •ํ•ด ๋„˜๊ธฐ๋Š” ๊ฐ’์ด๋ผ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ํ•  ์ฑ…์ž„๋„ ํ˜ธ์ถœ์ž์—๊ฒŒ ์žˆ๋‹ค
EntitySerialId.Next() ๋กœ ๋งค๋ฒˆ ์ƒˆ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›๋Š”๋‹ค
Can not find entity 'โ€ฆ'.
์ด๋ฏธ ์ˆจ๊ธด ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋˜ HideEntity. ์ฒซ ํ˜ธ์ถœ์—์„œ ์žฅ๋ถ€์—์„œ ์ง€์›Œ์กŒ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค
EntityLogicBase.SafeHide() โ€” "์ด๋ฏธ ์ˆจ๊น€ ์š”์ฒญ์„ ๋ณด๋ƒˆ๋‚˜" ํ”Œ๋ž˜๊ทธ๋กœ ํ•œ ๋ฒˆ๋งŒ ํ†ต๊ณผ์‹œํ‚จ๋‹ค
Entity group 'โ€ฆ' is not exist.
ShowEntity ์— ๋„˜๊ธด ๊ทธ๋ฃน ์ด๋ฆ„์ด EntityComponent ์— ๋“ฑ๋ก๋ผ ์žˆ์ง€ ์•Š๋‹ค (์˜คํƒ€)
๊ทธ๋ฃน ์ด๋ฆ„์„ EnemyTable.EntityGroup ๊ฐ™์€ ์ƒ์ˆ˜๋กœ ํ•œ๊ณณ์— ๋‘”๋‹ค
์ด์ค‘ HideEntity ๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ƒ๊ธฐ๋Š”์ง€ ์•Œ์•„ ๋‘๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ์ ์ด ๊ฐ™์€ ํ”„๋ ˆ์ž„์— ๋‘ ๋ฐœ์˜ ์ด์•Œ์„ ๋งž์•„ ์‚ฌ๋ง ์ฒ˜๋ฆฌ๊ฐ€ ๋‘ ๋ฒˆ ๋“ค์–ด์˜ค๊ฑฐ๋‚˜, ์ˆ˜๋ช… ํƒ€์ด๋จธ์™€ ์ถฉ๋Œ ํŒ์ •์ด ๋™์‹œ์— ํˆฌ์‚ฌ์ฒด๋ฅผ ํšŒ์ˆ˜ํ•˜๋ ค ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค. ๋“œ๋ฌผ์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๋ผ, ์˜ˆ์ œ๋Š” ๋ชจ๋“  ํšŒ์ˆ˜๋ฅผ SafeHide() ํ•˜๋‚˜๋กœ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค.
๋ถ€๋ชจ-์ž์‹ โ€” ๋ถ™์ด๋ฉด ํ•จ๊ป˜ ์‚ฌ๋ผ์ง„๋‹ค
AttachEntity(child, parent) ๋กœ ๋ถ™์ธ ์ž์‹์€ ๋ถ€๋ชจ๊ฐ€ ์ˆจ๊ฒจ์งˆ ๋•Œ ๋จผ์ € ์ž๋™์œผ๋กœ ์ˆจ๊ฒจ์ง‘๋‹ˆ๋‹ค. ๋ฌด๊ธฐ๋ฅผ ์บ๋ฆญํ„ฐ์— ๋ถ™์—ฌ ๋‘๋ฉด ์บ๋ฆญํ„ฐ๋ฅผ ํšŒ์ˆ˜ํ•  ๋•Œ ๋ฌด๊ธฐ๋ฅผ ๋”ฐ๋กœ ์ฑ™๊ธฐ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋งํ•˜๋ฉด, ๋ถ€๋ชจ๋ฅผ ์ˆจ๊ธด ๋’ค ์ž์‹์„ ๋˜ ์ˆจ๊ธฐ๋ ค ํ•˜๋ฉด ์œ„์˜ Can not find entity ์˜ˆ์™ธ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.
// ๋ฌด๊ธฐ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋œฌ ๋’ค(ShowEntitySuccess) ์บ๋ฆญํ„ฐ์˜ ์† ๋ณธ์— ๋ถ™์ธ๋‹ค entity.AttachEntity(weaponId, playerId, "RightHand");
C#
๋ณต์‚ฌ
ToyboxNightmare ๋Š” ๋ฌด๊ธฐ๋ฅผ ๋ณ„๋„ ์—”ํ‹ฐํ‹ฐ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์บ๋ฆญํ„ฐ ํ”„๋ฆฌํŒน์— ํฌํ•จํ•ด ๋‘์–ด์„œ ์ด ๊ธฐ๋Šฅ์„ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์žฅ๋น„ ๊ต์ฒด๊ฐ€ ์žˆ๋Š” ๊ฒŒ์ž„์ด๋ผ๋ฉด ๊ฐ€์žฅ ๋จผ์ € ์“ฐ๊ฒŒ ๋  ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
OnInit ๊ณผ OnShow ๊ฐ€ ๋‚˜๋‰œ ์ด์œ 
์ธ์Šคํ„ด์Šค๊ฐ€ ํ’€์—์„œ ์žฌ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. OnInit ์€ GameObject ๊ฐ€ ์ฒ˜์Œ ๋งŒ๋“ค์–ด์กŒ์„ ๋•Œ ํ•œ ๋ฒˆ, OnShow ๋Š” ์Šคํฐ๋  ๋•Œ๋งˆ๋‹ค ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.
OnInit ์— ๋‘˜ ๊ฒƒ
OnShow ์— ๋‘˜ ๊ฒƒ
์„ฑ๊ฒฉ
ํ•œ ๋ฒˆ ์ฐพ์•„ ๋‘๋ฉด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ
์Šคํฐ๋งˆ๋‹ค ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ
์˜ˆ
GetComponentInChildren ์œผ๋กœ ์บ์‹ฑ, ์ƒํƒœ ๊ฐ์ฒด ์ƒ์„ฑ
์ฒด๋ ฅยท์œ„์น˜ยทํƒ€์ด๋จธ ๋ฆฌ์…‹, FSM ์ƒ์„ฑ, ์• ๋‹ˆ๋ฉ”์ดํ„ฐ ์ดˆ๊ธฐํ™”
"๋‘ ๋ฒˆ์งธ ์Šคํฐ๋ถ€ํ„ฐ ์ฒด๋ ฅ์ด 0 ์ธ ์ฑ„๋กœ ๋‚˜์˜จ๋‹ค" ๊ฐ™์€ ๋ฒ„๊ทธ๋Š” OnShow ์—์„œ ๋ฆฌ์…‹ํ•  ๊ฒƒ์„ OnInit ์ด๋‚˜ ํ•„๋“œ ์ดˆ๊ธฐ๊ฐ’์— ๋งก๊ฒผ์„ ๋•Œ ์ƒ๊น๋‹ˆ๋‹ค.
โš ๏ธ
๋ณธ๋ฌธ์„ ์ฝ์„ ๋•Œ ์ฃผ์˜ํ•  ์ 
โ€ข
๋ณธ๋ฌธ์˜ entityManager.ShowEntity(...) ๋Š” ์ฝ”์–ด API ์ž…๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์ฝ”๋“œ๋Š” GameEntry.GetComponent<EntityComponent>() ๋ฅผ ์“ฐ๊ณ , ์—ฌ๊ธฐ์„œ๋Š” ๋กœ์ง ํƒ€์ž… ์ธ์ž๊ฐ€ ํ•˜๋‚˜ ๋” ๋ถ™์Šต๋‹ˆ๋‹ค โ€” ShowEntity(id, typeof(Enemy), "Zombunny", "Enemy", data).
โ€ข
"์‚ฌ์šฉ ๊ฐ€์ด๋“œ โ†’ ์ดˆ๊ธฐํ™”" ์˜ SetObjectPoolManager / SetResourceManager / AddEntityGroup ์€ EntityComponent ๊ฐ€ Start ์—์„œ ๋Œ€์‹  ํ•ด ์ค๋‹ˆ๋‹ค. ๊ทธ๋ฃน์€ ์ธ์ŠคํŽ™ํ„ฐ์—์„œ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
โ€ข
ShowEntityUpdate / ShowEntityDependencyAsset ์ด๋ฒคํŠธ๋Š” ์ด ์—๋””์…˜์—์„œ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋ฆฌ์†Œ์Šค ๊ณ„์ธต์ด ์ง„ํ–‰๋ฅ ์„ ์ „๋‹ฌํ•˜์ง€ ์•Š์Œ).
โ€ข
์—”ํ‹ฐํ‹ฐ๋ฅผ ์น˜์šธ ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ HideEntity ๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. Destroy ๋‚˜ SetActive(false) ๋กœ ์น˜์šฐ๋ฉด ์žฅ๋ถ€์—๋Š” ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚จ์•„ Id ๊ฐ€ ์˜์›ํžˆ ์ ์œ ๋˜๊ณ  ํ’€๋„ ์–ด๊ธ‹๋‚ฉ๋‹ˆ๋‹ค.

Entity Manager

๊ด€๋ จ ์†Œ์Šค ํŒŒ์ผ
โ€ข
GameFramework/Base/EventPool/EventPool.cs
โ€ข
GameFramework/Entity/EntityManager.EntityGroup.cs
โ€ข
GameFramework/Entity/EntityManager.EntityInfo.cs
โ€ข
GameFramework/Entity/EntityManager.cs
โ€ข
GameFramework/Entity/IEntityGroup.cs
โ€ข
GameFramework/Entity/IEntityManager.cs
โ€ข
GameFramework/Sound/SoundManager.cs
โ€ข
GameFramework/UI/IUIGroup.cs
โ€ข
GameFramework/UI/IUIManager.cs
โ€ข
GameFramework/UI/UIManager.UIGroup.cs
โ€ข
GameFramework/UI/UIManager.cs
Entity Manager๋Š” ๊ฒŒ์ž„ ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ, ๊ด€๋ฆฌ, ํŒŒ๊ดด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” GameFramework์˜ ํ•ต์‹ฌ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.
๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, UI ๊ด€๋ฆฌ์ž๋Š” UI ์ „์šฉ ๊ด€๋ฆฌ, ์‚ฌ์šด๋“œ ๊ด€๋ฆฌ์ž๋Š” ์‚ฌ์šด๋“œ ์ „์šฉ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์š” (Overview)

Entity Manager๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ค‘์•™ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.
โ€ข
์—์…‹์—์„œ ๊ฒŒ์ž„ ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ ๋ฐ ํ‘œ์‹œ
โ€ข
์—”ํ‹ฐํ‹ฐ๋ฅผ ๋…ผ๋ฆฌ์  ๊ทธ๋ฃน์œผ๋กœ ์กฐ์ง
โ€ข
์—”ํ‹ฐํ‹ฐ ๊ฐ„ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„ ๊ด€๋ฆฌ
โ€ข
์—”ํ‹ฐํ‹ฐ ์ƒ๋ช…์ฃผ๊ธฐ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
โ€ข
์˜ค๋ธŒ์ ํŠธ ํ’€์„ ํ†ตํ•œ ์—”ํ‹ฐํ‹ฐ ์ธ์Šคํ„ด์Šค ์žฌํ™œ์šฉ

ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜

๋‹ค๋ฅธ GameFramework ์‹œ์Šคํ…œ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ชจ๋“ˆํ˜• ๋””์ž์ธ ํŒจํ„ด์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

Entity Manager

EntityManager ํด๋ž˜์Šค๋Š” IEntityManager ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค.
์—ญํ• :
โ€ข
mEntityInfos ๋”•์…”๋„ˆ๋ฆฌ๋กœ ํ™œ์„ฑ ์—”ํ‹ฐํ‹ฐ ์ถ”์  (์›์ž‘ ํ‘œ๊ธฐ๋Š” m_EntityInfos)
โ€ข
mEntityGroups ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์—”ํ‹ฐํ‹ฐ ๊ทธ๋ฃน ๊ด€๋ฆฌ
โ€ข
๋ฆฌ์†Œ์Šค ๋งค๋‹ˆ์ €์™€ ํ˜‘๋ ฅํ•˜์—ฌ ์—”ํ‹ฐํ‹ฐ ๋กœ๋”ฉ
โ€ข
์—”ํ‹ฐํ‹ฐ ์žฌํ™œ์šฉ ๋ฐ ํ’€๋ง ๊ด€๋ฆฌ
โ€ข
๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„ ๊ด€๋ฆฌ
โ€ข
์ƒ๋ช…์ฃผ๊ธฐ ์ด๋ฒคํŠธ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ

์—”ํ‹ฐํ‹ฐ ๊ทธ๋ฃน (Entity Groups)

์—”ํ‹ฐํ‹ฐ ๊ทธ๋ฃน์€ ๊ด€๋ จ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ฌถ๋Š” ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.
๊ฐ ๊ทธ๋ฃน์€ ๊ณ ์œ ํ•œ ์ธ์Šคํ„ด์Šค ํ’€์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
์†์„ฑ:
โ€ข
Name: ๊ทธ๋ฃน ์‹๋ณ„์ž
โ€ข
EntityCount: ๊ทธ๋ฃน ๋‚ด ์—”ํ‹ฐํ‹ฐ ๊ฐœ์ˆ˜
โ€ข
InstanceAutoReleaseInterval: ํ’€ ์ž๋™ ํ•ด์ œ ์ฃผ๊ธฐ
โ€ข
InstanceCapacity: ํ’€ ์ตœ๋Œ€ ์šฉ๋Ÿ‰
โ€ข
InstanceExpireTime: ๋ฏธ์‚ฌ์šฉ ์ธ์Šคํ„ด์Šค ๋งŒ๋ฃŒ ์‹œ๊ฐ„
โ€ข
InstancePriority: ํ’€ ํ•ด์ œ ์šฐ์„ ์ˆœ์œ„
โ€ข
Helper: ๊ทธ๋ฃน ํ—ฌํผ ๊ตฌํ˜„์ฒด

์—”ํ‹ฐํ‹ฐ ์ •๋ณด ์ถ”์  (EntityInfo)

EntityManager๋Š” EntityInfo ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์—”ํ‹ฐํ‹ฐ ์ƒํƒœ๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

์—”ํ‹ฐํ‹ฐ ์ƒ๋ช…์ฃผ๊ธฐ

์—”ํ‹ฐํ‹ฐ๋Š” ์ƒ์„ฑ โ†’ ํ‘œ์‹œ โ†’ ์ˆจ๊น€ โ†’ ์žฌํ™œ์šฉ ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

์—”ํ‹ฐํ‹ฐ ํ‘œ์‹œ (ShowEntity)

์ ˆ์ฐจ:
1.
ShowEntity() ํ˜ธ์ถœ (ID, ์—์…‹ ์ด๋ฆ„, ๊ทธ๋ฃน ์ด๋ฆ„ ์ง€์ •)
2.
ํ’€์— ์ธ์Šคํ„ด์Šค ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ
3.
์—†์œผ๋ฉด ๋ฆฌ์†Œ์Šค ๋งค๋‹ˆ์ €๋กœ ์—์…‹ ๋กœ๋“œ
4.
๋กœ๋“œ ์„ฑ๊ณต ์‹œ ์—”ํ‹ฐํ‹ฐ ์ดˆ๊ธฐํ™”
5.
ํ•ด๋‹น ๊ทธ๋ฃน์— ์ถ”๊ฐ€
6.
OnInit(), OnShow() ์ฝœ๋ฐฑ ์‹คํ–‰
7.
ShowEntitySuccess ์ด๋ฒคํŠธ ๋ฐœ์ƒ

์—”ํ‹ฐํ‹ฐ ์ˆจ๊น€ (HideEntity)

์ ˆ์ฐจ:
1.
HideEntity() ํ˜ธ์ถœ (ID ๋˜๋Š” ์ฐธ์กฐ)
2.
๋กœ๋”ฉ ์ค‘์ด๋ฉด release-on-load ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€
3.
์•„๋‹ˆ๋ฉด InternalHideEntity() ํ˜ธ์ถœ
4.
OnHide() ์ฝœ๋ฐฑ ์‹คํ–‰
5.
์žฌํ™œ์šฉ ํ์— ์ถ”๊ฐ€
6.
HideEntityComplete ์ด๋ฒคํŠธ ๋ฐœ์ƒ

์—”ํ‹ฐํ‹ฐ ์žฌํ™œ์šฉ

์—…๋ฐ์ดํŠธ ๋ฃจํ”„์—์„œ ์žฌํ™œ์šฉ ํ ์ฒ˜๋ฆฌ:
1.
ํ์—์„œ ์—”ํ‹ฐํ‹ฐ ๊บผ๋‚ด๊ธฐ
2.
์ƒํƒœ๋ฅผ WillRecycle๋กœ ๋ณ€๊ฒฝ
3.
OnRecycle() ์ฝœ๋ฐฑ ์‹คํ–‰
4.
์ƒํƒœ๋ฅผ Recycled๋กœ ๋ณ€๊ฒฝ
5.
์ธ์Šคํ„ด์Šค๋ฅผ ํ•ด๋‹น ๊ทธ๋ฃน ํ’€์— ๋ฐ˜ํ™˜
6.
EntityInfo ํ•ด์ œ

์—”ํ‹ฐํ‹ฐ ๊ณ„์ธต ๊ตฌ์กฐ

๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

AttachEntity

โ€ข
์ž์‹ ์—”ํ‹ฐํ‹ฐ์— ๋ถ€๋ชจ ์ฐธ์กฐ ์„ค์ •
โ€ข
๋ถ€๋ชจ์˜ ์ž์‹ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€
โ€ข
๋ถ€๋ชจ OnAttached() ํ˜ธ์ถœ
โ€ข
์ž์‹ OnAttachTo() ํ˜ธ์ถœ

Query

โ€ข
GetParentEntity()
โ€ข
GetChildEntityCount()
โ€ข
GetChildEntity()
โ€ข
GetChildEntities()

DetachEntity

โ€ข
๋ถ€๋ชจ์˜ ์ž์‹ ๋ฆฌ์ŠคํŠธ์—์„œ ์ œ๊ฑฐ
โ€ข
์ž์‹์˜ ๋ถ€๋ชจ ์ฐธ์กฐ ์ œ๊ฑฐ
โ€ข
๋ถ€๋ชจ OnDetached() ํ˜ธ์ถœ
โ€ข
์ž์‹ OnDetachFrom() ํ˜ธ์ถœ

๋‹ค๋ฅธ ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ

์˜ค๋ธŒ์ ํŠธ ํ’€

โ€ข
๊ฐ ์—”ํ‹ฐํ‹ฐ ๊ทธ๋ฃน์€ ์ „์šฉ ํ’€ ๋ณด์œ 
โ€ข
ํ•„์š” ์‹œ ํ’€์—์„œ ์ƒ์„ฑ
โ€ข
์ˆจ๊ธธ ๋•Œ ํ’€์— ๋ฐ˜ํ™˜
โ€ข
๊ทธ๋ฃน๋ณ„ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ • ๊ฐ€๋Šฅ

๋ฆฌ์†Œ์Šค ๋งค๋‹ˆ์ €

โ€ข
์—์…‹ ๋กœ๋”ฉ ์œ„์ž„
โ€ข
๋กœ๋“œ ์„ฑ๊ณต/์‹คํŒจ ์ฝœ๋ฐฑ ์ฒ˜๋ฆฌ

์ด๋ฒคํŠธ ์‹œ์Šคํ…œ

โ€ข
ShowEntitySuccess
โ€ข
ShowEntityFailure
โ€ข
ShowEntityUpdate
โ€ข
ShowEntityDependencyAsset
โ€ข
HideEntityComplete

๋‹ค๋ฅธ ๋งค๋‹ˆ์ €์™€ ๋น„๊ต

๊ธฐ๋Šฅ
Entity Manager
UI Manager
Sound Manager
๊ทธ๋ฃน ๊ฐœ๋…
Entity Groups
UI Groups
Sound Groups
์—์…‹ ๋กœ๋”ฉ
Resource Manager
Resource Manager
Resource Manager
์ธ์Šคํ„ด์Šค ํ’€
Entity Instances
UI Form Instances
Sound Agents
ํ—ฌํผ ์ธํ„ฐํŽ˜์ด์Šค
IEntityHelper
IUIFormHelper
ISoundHelper
๊ทธ๋ฃน ํ—ฌํผ
IEntityGroupHelper
IUIGroupHelper
ISoundGroupHelper
๋ถ€๋ชจ-์ž์‹ ์ง€์›
O
X
X
์ƒ๋ช…์ฃผ๊ธฐ ์ด๋ฒคํŠธ
Show/Hide
Open/Close
Play/Stop

์‚ฌ์šฉ ๊ฐ€์ด๋“œ

์ดˆ๊ธฐํ™”

entityManager.SetObjectPoolManager(objectPoolManager); entityManager.SetResourceManager(resourceManager); entityManager.SetEntityHelper(entityHelper); entityManager.AddEntityGroup(groupName, autoReleaseInterval, capacity, expireTime, priority, groupHelper);
C#
๋ณต์‚ฌ

์—”ํ‹ฐํ‹ฐ ๊ธฐ๋ณธ ์กฐ์ž‘

entityManager.ShowEntity(entityId, entityAssetName, entityGroupName); entityManager.HideEntity(entityId); bool exists = entityManager.HasEntity(entityId); IEntity entity = entityManager.GetEntity(entityId);
C#
๋ณต์‚ฌ

๊ณ„์ธต ์กฐ์ž‘

entityManager.AttachEntity(childEntityId, parentEntityId); entityManager.DetachEntity(childEntityId); IEntity parent = entityManager.GetParentEntity(childEntityId); IEntity[] children = entityManager.GetChildEntities(parentEntityId);
C#
๋ณต์‚ฌ