프로젝트22 상점 데이터 갱신 방식 개선 개요 Wild Bowl : Zooports의 상점 구조를 UniRx를 활용해 리팩토링하고, 데이터 갱신 방식을 개선한 경험을 기록하기 위한 글이다. 내용배경게임 초기에 상품 구성은 고정되어 있었다. 하지만 일정 시간마다 상품이 새로고침되거나 특정 레벨에 도달하는 등 특정 조건에 따라 상품이 교체되는 기능을 구현해야했다. 기존의 구조로 요구사항을 구현하는 데에는 여러 문제점이 있었고, 리팩토링할 필요가 있었다. 문제점1. 데이터 처리와 UI가 결합된 구조로 인한 기능 확장 및 수정이 어려움이전 구조는 데이터를 처리하는 비즈니스 로직과 UI가 강하게 결합되어 있었다. 그래서 새로운 기능을 추가하거나 기존 기능을 수정하기 어려웠다.2. 불필요한 데이터 요청으로 서버와의 통신량 증가 및 쿼리 비용 증가모든 상.. 2025. 1. 4. 오브젝트 풀링 시스템 개요현재 개발중인 Keeping Night에서 사용하는 오브젝트 풀링 기법을 어떻게 구현하였는지 소개하고자 한다. 내용배경인게임에서 플레이어블 캐릭터와, 대다수의 적 유닛들이 총을 사용한다. 이 때문에, 많은 총알 객체가 반복 생성 및 제거되어 성능 저하와 메모리 단편화 우려가 있었고 이를 해결하기 위해 풀링 시스템을 도입하였다. 문제유니티에서 객체가 반복적으로 생성 및 제거되면 다음과 같은 문제가 있다.성능 저하Unity에서 객체를 반복적으로 생성하고 제거하면 성능 저하가 발생할 수 있다. 객체를 생성할 때는 메모리 할당과 초기화 등의 연산이 필요하다. 따라서 짧은 시간에 많은 객체가 생성될 경우 프레임 드랍과 같은 성능 문제가 발생할 수 있다. 객체를 제거할 때는 가비지 컬렉션이 일어난다. GC가.. 2025. 1. 3. 로딩 시스템 구현 개요 인게임 => 로딩 => 로비 현재 개발중인 Keeping Night에서 구현한 로딩 시스템을 소개하고자 한다. 내용배경 Keeping Night의 로딩 시스템 설계는 두 가지 목표를 가지고 진행했다.게임 씬 전환시 끊기지 않는 사용자 경험을 제공해야 한다로딩 과정에서 발생할 수 있는 오류를 방지하고, 안정적으로 전환해야 한다이 목표를 달성하기 위해, 설계는 TCP 프로토콜의 3-way handshake 방식을 참고했다. 각 씬의 준비 상태를 명확히 확인하고, 이를 순차적으로 처리할 수 있도록 구성했다. 설계 전략SceneLoadingHelper.LoadSceneAsync(ESceneType type)// SceneLoadingHelper 클래스 내부private readonly Func _getS.. 2025. 1. 3. 씬 구조 설계 개요현재 개발중인 Keeping Night의 씬 구조 설계를 소개하고자 한다. 내용배경Keeping Night은 개발 규모가 작고 싱글 플레이 환경을 기반으로 한 프로젝트다. 이러한 특성을 고려했을 때, 프로젝트 구조는 아래의 두 가지 목표를 충족하는 방향으로 설계했다.복잡한 구조를 지양: 간결한 설계를 통해 개발 과정에서의 불필요한 복잡성을 줄이는 것.유지보수와 확장성 보장: 기능 추가나 변경이 용이하도록 설계하는 것. 설계 전략씬 분할게임은 크게 네 가지 주요 씬(Title, Lobby, Loading, InGame)으로 나누어 구성하였다. 각 씬은 명확한 역할을 가지며, 이를 통해 어떤 씬의 무엇을 작업해야하는지 명확하게 구분하였다. Title 씬타이틀씬 모습/// /// Title 모듈들의 초기.. 2025. 1. 3. 이전 1 2 3 4 다음 반응형