던전앤파이터 모바일은 PC 버전의 재미를 모바일에서 재현하기 위해 유니티 엔진 기반으로 개발되었으며, 초기에는 PC 소스 및 리소스 구조를 최대한 유지하는 방식으로 전환을 시도했습니다. 🔄
PC 던파의 객체 구조(DNF Object, Animation, Frame)는 비즈니스 코드 내에서 다이렉트 API를 직접 호출하는 방식으로 렌더링을 처리했으나, 유니티 환경에 맞춰 MonoBehaviour를 상속받고 Sprite Renderer와 연동하는 방식으로 재설계했습니다. 🧩
초기 유니티 구동 후 메모리 사용량 증가와 불안정한 FPS 문제에 직면하여, 성능 병목 해소를 위해 게임 구조를 연산(로직)과 표현(뷰) 레이어로 완전히 분리하는 계층화 작업을 진행했습니다. 🏗️
로직 레이어는 독립적인 로직 스레드에서 게임 규칙과 연산만 담당하고, 뷰 레이어는 유니티 메인 스레드에서 표현만 담당하도록 하여 병렬 처리 효율을 극대화하고 안정적인 성능을 확보했습니다. 🚀
향후 고사양 연출 지원을 위해 유니티 엔진 버전 마이그레이션, Addressable System, Texture Array, ECS 구조 도입 등 최신 유니티 기술을 적극적으로 활용할 계획입니다. ✨
PC 던파의 P2P 방식 전투 동기화는 빠른 반응 속도와 낮은 서버 비용의 장점이 있었으나, 상태 불일치 및 치트 방지 어려움으로 모바일 환경에는 부적합하다고 판단했습니다. 🤝
던파 모바일은 완벽한 동기화, 강력한 치트 방지, 최소화된 데이터 전송량을 위해 락스텝 서버 기반의 프레임 동기화 방식을 채택했습니다. 🔒
프레임 동기화 방식 구현을 위해 결정론적 구조 보장(뷰-로직 분리, 유니티 라이프사이클 비종속, 동일 랜덤 시드 초기화, 로직 레이어 내 '나' 개념 배제)이 필수적입니다. ⚙️
부동소수점 연산 오차 문제를 해결하기 위해 빌드 시점에 Roslyn 분석기를 활용하여 플로팅 포인트 연산 구문을 일괄 치환하고, 함수 호출 추적 구문을 자동 삽입하여 동기화 오류 추적을 용이하게 했습니다. 🔢
락스텝 방식의 반응 속도 저하 문제를 완화하기 위해 '선이동' 개념을 도입, 플레이어 조작 캐릭터는 로컬 입력 기반으로 즉시 이동하고, 락스텝 입력 기반 결과와 비교하여 보정하는 방식을 사용합니다. 🏃♀️
결정론적 프레임 동기화 구조를 기반으로 전투 검증, 재접속 플레이 복구(난입), 관전 및 다시보기 기능을 제공하는 강력한 리플레이 시스템을 구축했습니다. 🎬
서비스 운영 효율성을 위해 동기화 오차율, 크래시율, 메모리 사용량, FPS 등 핵심 기술 지표를 실시간으로 모니터링하는 대시보드를 운영하고 있습니다. 📊
안정적인 서비스 운영을 위해 기능 테스트, 전투 성능 테스트, 동기화 오류 검출 테스트 등을 수행하는 자동화된 단위 테스트 봇을 활용하고 있습니다. 🤖
모바일 플랫폼의 앱 심사 지연 문제를 극복하기 위해 텐센트의 유니티 런타임 핫픽스 솔루션인 'Inject Fix'를 도입하여 실행 파일 패치 없이 버그를 신속하게 수정하고 있습니다. 🩹
PC 기반 게임을 모바일로 전환하는 과정에서 겪었던 기술적 도전과 해결 과정을 공유하며, 유사한 상황에 있는 개발자들에게 실질적인 힌트를 제공하고자 합니다. 💡