일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- gameplay ability system
- attribute
- gameplay tag
- 게임개발
- C++
- 보안
- Unreal Engine
- ability task
- 게임 개발
- UI
- widget
- gas
- photon fusion2
- listen server
- 언리얼 엔진
- Replication
- Multiplay
- local prediction
- CTF
- os
- 언리얼엔진
- unity
- gameplay effect
- rpc
- MAC
- stride
- Aegis
- level design
- 유니티
- animation
- Today
- Total
Replicated
[Teck Interview] 게임 클라이언트 구조, MVC, MVVM, 상태 동기화, 씬 전환 메모리 최적화 본문
게임 클라이언트의 기본 구조
사용자와 서버 간 중개자
화면에 그래픽을 표시하고 입력을 처리하고 네트워크 통신
입력, UI, 렌더링, 오디오, 게임 로직, 애니메이션, 네트워크, 리소스 관리, 씬/레벨 관리, 로컬 저장/관리
MVC, MVMM 패턴을 게임 클라이언트에 어떻게 적용?
패턴 주요 목적 게임 클라이언트에서 적용 대상
MVC | UI와 로직 분리 | 메뉴 UI, HUD, 인벤토리 등 |
MVVM | 바인딩 중심의 구조화 | 데이터와 UI가 자주 바뀌는 경우 (예: HP 바, 채팅창 등) |
MVC (Model-View-Controller)
- Model: 게임 데이터 (ex. 인벤토리 데이터 클래스)
- View: UI 요소 (ex. 인벤토리 위젯)
- Controller: 입력 처리 및 로직 연결 (ex. 아이템 클릭 시 처리, 서버 통신 등)
MVVM(Model-View-ViewModel)
- Model: 게임 데이터 (ex. 플레이어 스탯 클래스)
- View: UI 요소 (ex. 바인딩 기반으로 View Model 표시)
- ViewModel: UI와 데이터 사이의 중간자 - 바인딩 로직 (HP 바뀌면 자동으로 UI 반영)
단순한 UI 구조 (클릭 처리 등) | MVC |
데이터가 자주 변하고 자동 반영 필요 | MVVM |
언리얼 UMG 사용 중 → 바인딩 많이 씀 | MVVM 경향 |
Unity에서 MonoBehaviour 위주 개발 | MVC 구조 선호 |
클라이언트 상태 동기화 관리
클라이언트와 서버 간에 게임 상태를 일치시키는 메커니즘
서버 권위 방식(Server Authority)
- 서버가 모든 상태의 진짜 소유자
- 클라이언트는 입력만 보내고 결과는 서버로부터 수신
클라이언트 예측(Client-side Prediction)
- 클라이언트가 입력에 따라 미리 예상 결과를 실행
- 서버가 결과를 보내면 검증하고 맞지 않으면 롤백/보정
보간(Interpolation)
- 서버에서 받은 상태를 시간차를 두고 부드럽게 재생
- 서버 위치를 즉시 적용하지 않고 약간 이전 상태 기준으로 부드럽게 움직임
- 순간이동 방지, 자연스러운 움직임
보정(Reconciliation)
- 클라이언트에서 예측한 결과와 서버가 다를 때 잘못된 부분만 보정
예시: 플레이어 위치
클라이언트 -> 서버
- 입력 정보 전송 (이동 방향, 키 상태)
서버 -> 클라이언트
- 클라이언트는 예측한 결과와 비교해 차이 나면 보정
씬 전환 시 메모리 관리 및 최적화
불필요한 리소스 언로드
언리얼: UnloadStreamLevel
유니티: UnloadSceneAsync, UnloadUnusedAssets
GC 수동 호출
언리얼: CollectGarbage(GARBAGE_COLLECTION_KEEPFLAGS);
유니티: System.GC.Collect();
리소스 정리 직후나 씬 로딩 전후에만
씬 스트리밍
하나의 큰 씬 대신 필요한 파트만 로딩해서 메모리 절감
- 오픈월드, 챕터 전환, 레벨 일부만 변경되는 상황에 유리
레벨 전환 전 최적화 작업
- UI 정리
- 이벤트 바인딩 해제
- 타이머, 쓰레드 정지
- 사운드, 이펙트 정리
- 애셋 참조 해제
'지식' 카테고리의 다른 글
[Teck Interview] UI/UX 개발 시 고려 사항 (0) | 2025.05.28 |
---|---|
[Teck Interview] 네트워크 및 멀티플레이 (0) | 2025.05.28 |
[Teck Interview] C++, 동기, 비동기, 블로킹, 논블로킹, 게임 최적화 (0) | 2025.05.28 |
[Math] 외적 (0) | 2025.05.28 |
[Math] 내적 (0) | 2025.05.28 |