Projects

VR 멀티플레이어 리듬게임

Unity VR + Photon 기반. WAV 바이너리 파싱, 웨이브폼 시각화, 노트 에디터, 멀티플레이어 동기화, GitHub Actions 자동화.

2025.02.20 ~ 2025.05.17 (87일)|팀 프로젝트 (팀장 / 리드 개발)
    UnityC#VR / XRPhoton PUNAudio ProcessingGitHub Actions
VR 멀티플레이어 리듬게임

Unity VR + Photon 기반 멀티플레이어 리듬게임. 커스텀 노트 에디터로 채보를 제작하고, VR 환경에서 여러 플레이어가 동시에 경쟁하는 구조.

  • 개발 형태: 기업 협약 PBL 팀 프로젝트 (기획 3 / 프로그래머 5, 팀장)
  • 기간: 2025.02.20 ~ 2025.05.17 (87일)
  • 담당: 노트 에디터 시스템, 오디오 데이터 파이프라인, VR Player 시스템, Photon 멀티플레이어, GitHub 워크플로우 자동화

동기

기업 협약 기반의 VR 리듬게임 프로젝트였다. 노트 채보를 직접 만들 수 있는 에디터, VR 환경에서의 실시간 플레이, 여러 플레이어가 동시에 경쟁하는 멀티플레이 환경까지 구현해야 했다.

기술적으로 가장 큰 과제는 오디오 데이터 처리였다. VR 환경에서는 UnityWebRequest 같은 기본 API가 정상 동작하지 않아, 외부 WAV 파일을 직접 바이너리 수준에서 파싱해야 했다. 에디터에서는 오디오 파형을 실시간으로 시각화해야 했고, 이 모든 과정에서 메인 스레드를 블로킹하지 않는 비동기 처리가 필수였다.

접근

오디오 파이프라인을 세 단계로 나눴다.

첫째, WAV 바이너리 파싱. RIFF/fmt/data 청크를 직접 읽어 샘플레이트, 비트 깊이, 채널 수를 추출하고 PCM 데이터를 float 배열로 변환하는 커스텀 파서(WavUtility)를 구현했다. VR 플랫폼 제약을 우회하면서도 다양한 WAV 포맷을 처리할 수 있는 구조다.

둘째, 웨이브폼 시각화. 전체 오디오 샘플을 구간별로 집계하여 RMS 진폭 기반의 웨이브폼 텍스처를 생성하고, 노트 에디터 UI에 실시간으로 반영했다.

셋째, 노트 데이터 관리. 트랙 메타데이터와 노트맵을 JSON으로 직렬화하고, async/await 기반 비동기 파일 I/O로 에디터가 멈추지 않도록 처리했다.

멀티플레이어는 Photon PUN으로 구현했고, XRPlayer 시스템에서 로컬/원격 플레이어의 컨트롤러, 인터랙터, 오브젝트 상태를 분리 관리했다.

VR 게임 플레이
VR 게임 플레이

핵심 구현

영역내용
WAV 파싱RIFF/fmt/data 청크 직접 파싱, 8/16bit PCM -> float 정규화, VR 플랫폼 호환
웨이브폼샘플 데이터 구간별 집계, RMS 기반 텍스처 생성, 청크 단위 픽셀 할당
노트 에디터GUID 기반 트랙/노트 관리, async 파일 I/O, JSON 직렬화
멀티플레이어Photon PUN RPC, XRPlayer 로컬/원격 분기, 햅틱 피드백
자동화GitHub Actions 커밋 파싱, 이슈 자동 생성, 일일 보고서 갱신

기술 스택

기술적용 영역
C# / Unity 2020.3VR 게임 로직, 노트 에디터, 오디오 처리
XR Interaction ToolkitVR 컨트롤러, 레이 인터랙터, 햅틱 피드백
Photon PUN멀티플레이어 동기화, RPC, 커스텀 프로퍼티
WAV RIFF 파싱바이너리 오디오 데이터 -> AudioClip 변환
GitHub Actions커밋 기반 이슈 자동화, 일일 보고서 생성

문서 구성

문서내용
01-오디오-데이터-파이프라인WAV 바이너리 파싱, 웨이브폼 텍스처 생성, 비동기 로딩
02-노트-에디터-시스템트랙/노트 데이터 관리, JSON 직렬화, 비동기 I/O
03-VR-멀티플레이어XRPlayer 시스템, Photon 동기화, GitHub Actions 자동화
오디오 데이터 파이프라인