서비스
교육 철학

UI 및 엔티티 시스템

Abstract

📌
화면에 보이는 것은 둘 중 하나입니다. 게임 월드에 있는 것은 엔티티, 화면에 덮이는 것은 UI 폼. 두 시스템은 구조가 거의 같습니다 — 그룹으로 묶고, 비동기로 열고, 풀로 재사용하고, 로직 클래스의 훅으로 수명을 받습니다. 하나를 이해하면 다른 하나는 이름만 바꿔 읽으면 됩니다.
한눈에 비교
엔티티
UI 폼
대상
캐릭터, 적, 총알, 이펙트
HUD, 메뉴, 팝업
열기 / 닫기
ShowEntity / HideEntity
OpenUIForm / CloseUIForm
로직 기반 클래스
EntityLogic
UIFormLogic
수명 훅
OnInit → OnShow → OnUpdate → OnHide
OnInit → OnOpen → OnUpdate → OnClose
ID
호출자가 정해서 넘긴다
프레임워크가 발급해 반환한다 (serialId)
프리팹에 로직 스크립트
붙이지 않는다 (런타임에 붙는다)
반드시 붙인다 (GetComponent 로 찾는다)
ToyboxNightmare 의 그룹
Player, Enemy, Projectile, Effect, Ally
Default
마지막 두 줄이 가장 자주 틀리는 곳입니다. 특히 "프리팹에 로직을 붙이느냐"는 둘이 정반대라서, 엔티티 습관대로 UI 폼을 만들면 콜백이 하나도 돌지 않고, UI 습관대로 엔티티를 만들면 컴포넌트가 둘이 됩니다.
왜 둘 다 풀링인가
뱀서라이크는 적과 총알이 초당 수십 개씩 생기고 사라집니다. Instantiate / Destroy 를 그대로 쓰면 GC 스파이크로 프레임이 튑니다. 두 시스템 모두 닫힌 인스턴스를 풀에 돌려놓았다가 같은 에셋이 다시 요청되면 꺼내 줍니다. 그 대가로 "초기화는 Awake 가 아니라 OnShow / OnOpen 에서" 라는 규칙이 생깁니다.
세부는 하위 페이지 Entity System (엔티티 시스템) 과 UI 시스템 에서 다룹니다.

UI 및 엔티티 시스템

관련 소스 파일
•
Scripts/Runtime/Base/GameEntry.cs
•
Scripts/Runtime/Entity/Entity.cs
•
Scripts/Runtime/Entity/EntityComponent.cs
•
Scripts/Runtime/Entity/EntityLogic.cs
•
Scripts/Runtime/Scene/SceneComponent.cs
•
Scripts/Runtime/Sound/SoundComponent.cs
•
Scripts/Runtime/UI/UIComponent.cs
•
Scripts/Runtime/UI/UIForm.cs
•
Scripts/Runtime/UI/UIFormLogic.cs
이 문서는 Game Framework의 UI 및 엔티티 시스템에 대한 개요를 제공하며, 그 아키텍처, 구성 요소, 그리고 두 시스템이 서로 어떻게 상호작용하는지를 설명합니다. 이 두 가지 핵심 시스템은 각각 시각적 인터페이스와 게임 오브젝트를 처리하며, 플레이어가 보고 상호작용하는 것들의 기반을 형성합니다.
두 시스템이 모두 의존하는 리소스 관리 시스템에 대한 정보는 Resource Management System을 참조하십시오.

시스템 아키텍처 개요

UI와 엔티티 시스템은 서로 다른 목적을 가지고 있지만 구현 패턴은 유사합니다. 두 시스템 모두 데이터 매니저와 로직 핸들러 간의 명확한 분리를 갖춘 컴포넌트 기반 아키텍처를 사용합니다.
출처:
Scripts/Runtime/Base/GameEntry.cs 32-57
Scripts/Runtime/UI/UIComponent.cs 16-22
Scripts/Runtime/Entity/EntityComponent.cs 16-23
Scripts/Runtime/Scene/SceneComponent.cs 16-23

공통 아키텍처 패턴

UI 및 엔티티 시스템은 모두 다음과 같은 유사한 아키텍처 패턴을 따릅니다:
•
공개 API를 제공하는 컴포넌트 클래스 (예: UIComponent, EntityComponent)
•
기본 로직을 처리하는 매니저 인터페이스 (예: IUIManager, IEntityManager)
•
Unity의 GameObject와 연결되는 GameObject 래퍼 (예: UIForm, Entity)
•
동작을 정의하는 로직 베이스 클래스 (예: UIFormLogic, EntityLogic)
출처:
Scripts/Runtime/UI/UIComponent.cs 22-23
Scripts/Runtime/Entity/EntityComponent.cs 22-24
Scripts/Runtime/UI/UIForm.cs 17-18
Scripts/Runtime/Entity/Entity.cs 18-19
Scripts/Runtime/UI/UIFormLogic.cs 15-16
Scripts/Runtime/Entity/EntityLogic.cs 15-16

UI 시스템

UI 시스템은 사용자 인터페이스를 생성, 관리, 표시하는 구조화된 접근 방식을 제공합니다. UI 요소를 그룹으로 조직하고 깊이(depth) 제어를 하며, UI 생명주기를 관리합니다.

핵심 구성 요소

출처:
Scripts/Runtime/UI/UIComponent.cs 147-182
Scripts/Runtime/UI/UIFormLogic.cs 102-205
Scripts/Runtime/UI/UIForm.cs 112-303

UI Component

UIComponent는 UI 작업을 위한 주요 진입점 역할을 합니다. UI 그룹을 관리하고 UI 폼을 열고 닫는 메서드를 제공합니다.
주요 기능:
•
성능 향상을 위한 UI 폼 인스턴스 풀링
•
깊이 제어가 있는 UI 그룹 관리
•
리소스로부터 UI 폼 로딩
•
UI 폼 생명주기 관리
출처:
Scripts/Runtime/UI/UIComponent.cs 489-585
Scripts/Runtime/UI/UIComponent.cs 292-323

UIForm 및 UIFormLogic

UIForm은 UI GameObject에 부착되는 Unity 컴포넌트이고, UIFormLogic은 UI 동작을 구현하기 위한 베이스 클래스를 제공합니다.
주요 UIFormLogic 기능:
•
가시성 제어
•
생명주기 콜백
•
UI 상태 관리
상태 변화
설명
발생 시점
OnOpen
UI 초기화 및 표시
UI 폼이 열릴 때
OnClose
정리 및 숨김
UI 폼이 닫힐 때
OnPause
UI 활동 일시 중지
다른 UI에 의해 가려질 때
OnResume
UI 활동 재개
가려진 후 다시 드러날 때
OnCover
UI가 덮임
다른 UI가 위에 나타날 때
OnReveal
UI가 더 이상 덮이지 않음
위 UI가 제거될 때
OnRefocus
UI가 다시 활성화됨
UI가 맨 앞으로 올 때
출처:
Scripts/Runtime/UI/UIFormLogic.cs 102-205
Scripts/Runtime/UI/UIForm.cs 112-303

엔티티 시스템

엔티티 시스템은 게임 월드에 존재하는 게임 오브젝트를 관리합니다. 부모-자식 관계를 포함하여 엔티티 생성, 표시, 관리 메커니즘을 제공합니다.

핵심 구성 요소

출처:
Scripts/Runtime/Entity/EntityComponent.cs 77-164
Scripts/Runtime/Entity/EntityLogic.cs 103-201
Scripts/Runtime/Entity/Entity.cs 88-278

Entity Component

EntityComponent는 엔티티를 관리하는 주요 컴포넌트입니다. 엔티티를 표시/숨기는 메서드와 그룹 및 부모-자식 관계를 관리합니다.
주요 기능:
•
성능 향상을 위한 엔티티 인스턴스 풀링
•
엔티티 그룹 관리
•
리소스로부터 엔티티 프리팹 로딩
•
엔티티 생명주기 관리
•
부모-자식 관계 관리
출처:
Scripts/Runtime/Entity/EntityComponent.cs 390-495
Scripts/Runtime/Entity/EntityComponent.cs 205-233

Entity 및 EntityLogic

Entity는 엔티티 GameObject에 부착되는 Unity 컴포넌트이며, EntityLogic은 엔티티 동작을 구현하기 위한 베이스 클래스를 제공합니다.
주요 EntityLogic 기능:
•
가시성 제어
•
생명주기 콜백
•
엔티티 상태 관리
•
부모-자식 관계 처리
상태 변화
설명
발생 시점
OnShow
엔티티 초기화 및 표시
엔티티가 표시될 때
OnHide
정리 및 숨김
엔티티가 숨겨질 때
OnAttached
자식 엔티티 부착됨
이 엔티티에 자식이 부착될 때
OnDetached
자식 엔티티 분리됨
이 엔티티에서 자식이 분리될 때
OnAttachTo
부모 엔티티에 부착됨
이 엔티티가 부모에 부착될 때
OnDetachFrom
부모 엔티티에서 분리됨
이 엔티티가 부모에서 분리될 때
출처:
Scripts/Runtime/Entity/EntityLogic.cs 103-201
Scripts/Runtime/Entity/Entity.cs 88-278
Scripts/Runtime/Entity/EntityComponent.cs 560-1369

씬 시스템 및 통합

SceneComponent는 씬 로딩 및 전환을 관리하며, 이는 UI 및 엔티티 시스템 모두에 영향을 줍니다. 씬을 로드, 언로드, 관리할 수 있으며 적절한 이벤트 처리를 제공합니다.
출처:
Scripts/Runtime/Scene/SceneComponent.cs 252-299
Scripts/Runtime/Scene/SceneComponent.cs 304-331
Scripts/Runtime/Scene/SceneComponent.cs 437-475

생명주기 비교

UI 및 엔티티 시스템은 유사한 생명주기를 가지지만, 각 목적에 맞는 다른 용어를 사용합니다:
UI 시스템
엔티티 시스템
목적
OnInit
OnInit
컴포넌트 초기화
OnOpen
OnShow
사용자에게 표시
OnClose
OnHide
화면에서 제거
OnPause / OnResume
N/A
UI 전용 상태 (레이어링)
OnCover / OnReveal
N/A
UI 전용 상태 (레이어링)
N/A
OnAttached / OnDetached
엔티티 전용 계층 처리
OnUpdate
OnUpdate
정기 업데이트 로직
OnRecycle
OnRecycle
오브젝트 풀링을 통한 재사용 준비
출처:
Scripts/Runtime/UI/UIFormLogic.cs 102-205
Scripts/Runtime/Entity/EntityLogic.cs 103-201

사용 통합

UI 및 엔티티 시스템은 자주 함께 작동합니다. 예를 들어, UI는 엔티티를 참조할 수 있고 (예: 플레이어 엔티티를 참조하는 캐릭터 스탯 UI), 엔티티는 UI를 트리거할 수 있습니다 (예: NPC 엔티티가 대화 UI를 여는 경우).
출처:
Scripts/Runtime/Entity/EntityComponent.cs 374-386
Scripts/Runtime/UI/UIComponent.cs 582-585
Scripts/Runtime/Sound/SoundComponent.cs 373-379

요약

UI 및 엔티티 시스템은 사용자 인터페이스와 게임 엔티티를 관리하기 위한 포괄적인 프레임워크를 형성하며, 주요 기능은 다음과 같습니다:
•
관심사의 명확한 분리를 갖춘 컴포넌트 기반 아키텍처
•
UI 폼 및 엔티티 모두에 대한 생명주기 관리
•
조직화를 위한 그룹화 기능
•
성능 최적화를 위한 오브젝트 풀링
•
엔티티의 부모-자식 관계 지원
•
UI 깊이 관리로 적절한 레이어링 제공
•
원활한 전환을 위한 씬 시스템 통합
이 시스템들을 통해 구조적이고 유지보수 가능한 방식으로 게임 인터페이스를 구축하고 게임 월드를 채울 수 있는 견고한 기반을 제공합니다.
출처:
Scripts/Runtime/UI/UIComponent.cs
Scripts/Runtime/Entity/EntityComponent.cs
Scripts/Runtime/UI/UIFormLogic.cs
Scripts/Runtime/Entity/EntityLogic.cs
Scripts/Runtime/Scene/SceneComponent.cs