방문자

오늘
—
어제
—
누적
—

불러오는 중

게임 개발 · 기술 동향 · 팀 블로그MIRO
헤드라인

LAST37N

수원 한복판에서 살아남는 게임을 웹으로 옮기기

웹 프로토타입의 수원 거리
웹 프로토타입의 수원 거리

흩어진 기능을 로컬 웹 플레이로 묶었습니다

LAST37N은 지도 중심 구상에서 Unity TPS로 출발해 생존·전투·협동·구조를 묶은 로컬 프로토타입으로 확장됐습니다. 이 글은 마지막 통합 보고에 남은 구현 범위와 검증 결과를 정리합니다. 공개 상용 서비스가 완성된 단계는 아니며, 전체 완성도를 임의의 백분율로 표시하지 않았습니다.

Unity는 입력·카메라·애니메이션·HUD와 도시 표현을 맡습니다. Node·TypeScript 서버는 이동·아이템·거래·전투·구조 결과를 결정하고 PostgreSQL/PostGIS가 월드·캐릭터·명령 영수증을 저장합니다. 웹은 JavaScript WebSocket 브리지, Windows는 네이티브 전송을 사용합니다.

웹 프로토타입의 수원 거리

호위 기능을 테스트한 게임 화면

도시 수색에 구조 흐름을 연결했습니다

실제 OSM 건물 37,308개와 도로 15,722개를 주변 청크로 불러오고, 18개 동네 수색 지점과 상인·의무병·구호소를 연결했습니다. 월드당 세 개의 선택 구조 이벤트는 물자 지원, 호위, 구호소 인계, 보상으로 이어집니다. 위험하면 대기했다가 재개할 수 있습니다.

아래는 원문에 기록된 구조 흐름을 요약한 도표입니다. 완전한 NPC 경로 탐색이나 모든 예외 분기를 구현한 코드 도표는 아닙니다.

flowchart LR
 A["물자 지원"] --> B["NPC 호위"]
 B --> C["구호소 인계"]
 C --> D["보상"]
 B --> E["위험 시 대기"]
 E --> B

플레이어당 호위는 한 명이며 구조 NPC 사망과 고급 경로 탐색은 없습니다. 도시도 평면 지형과 임시 건물 높이를 사용합니다. 건물 내부 진입과 화재 피해, 자유 등반까지 구현된 것으로 설명하지 않았습니다.

마지막 경량화는 별도의 기준으로 비교했습니다

초기 게임 파일은 마지막 경량화 출발점의 11,095,729바이트에서 6,746,062바이트로 39.20% 줄었습니다. Brotli와 엔진 축소, 미사용 리소스 정리, 애니메이션 데이터 축소를 적용했습니다. 앞선 gzip 전환 작업의 수치와 출발점이 다르므로 같은 개선율로 합치지 않습니다.

상태 전송에는 월드별 차분과 전체 상태 복구를 사용했습니다. 동일 최종 100개 WebSocket 부하에서 상태 바이트가 전체 상태 환산 대비 81.14% 줄었습니다. 지도와 모든 인터넷 비용을 포함한 수치는 아닙니다. 렌더에는 공유 재질 팔레트, 원거리 LOD, 원격 애니메이션·그림자 제한과 캐시 재사용을 적용했습니다.

한 화면의 렌더와 서버 부하를 나눠 검증했습니다

같은 100명 장면에서 실제 Unity 하나와 WebSocket 피어 99개를 사용한 표본은 평균 19.35FPS에서 52.99FPS로 개선됐습니다. 조건은 1440×900과 GTX970입니다. 100대 Unity의 동시 렌더 성능이나 모든 장치의 결과로 일반화하지 않습니다.

별도 한 시간 반복 시험에서는 201회 반복과 67회 재접속 동안 오류가 없고 세 월드의 재질·메시 수가 유지됐습니다. 총보고는 기존 실행 JSON과 설정·문서·Git 이력을 대조한 기록이며 모든 시험을 이 글 작성 때 다시 수행한 것은 아닙니다.

공개 계정 인증과 HTTPS 게임 호스팅, 여러 서버의 월드 운영, 장기 인터넷 운영과 모바일·저사양 검증은 남았습니다. 외부에 공개된 것은 결과 아카이브이며 게임은 로컬 실행 단계였습니다. 이번 통합의 의미는 기능 목록을 늘린 것뿐 아니라, 서로 다른 검증의 조건과 한계를 남기며 실제 플레이 가능한 흐름으로 연결한 데 있습니다.

작업 근거

댓글

이 글에 대한 생각을 남겨 주세요.

댓글 삭제

헤드라인

같은 카테고리의 글

프로젝트 개발일지 전체 보기 ↗