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 시스템에서 로컬/원격 플레이어의 컨트롤러, 인터랙터, 오브젝트 상태를 분리 관리했다.

핵심 구현
| 영역 | 내용 |
|---|---|
| WAV 파싱 | RIFF/fmt/data 청크 직접 파싱, 8/16bit PCM -> float 정규화, VR 플랫폼 호환 |
| 웨이브폼 | 샘플 데이터 구간별 집계, RMS 기반 텍스처 생성, 청크 단위 픽셀 할당 |
| 노트 에디터 | GUID 기반 트랙/노트 관리, async 파일 I/O, JSON 직렬화 |
| 멀티플레이어 | Photon PUN RPC, XRPlayer 로컬/원격 분기, 햅틱 피드백 |
| 자동화 | GitHub Actions 커밋 파싱, 이슈 자동 생성, 일일 보고서 갱신 |
기술 스택
| 기술 | 적용 영역 |
|---|---|
| C# / Unity 2020.3 | VR 게임 로직, 노트 에디터, 오디오 처리 |
| XR Interaction Toolkit | VR 컨트롤러, 레이 인터랙터, 햅틱 피드백 |
| Photon PUN | 멀티플레이어 동기화, RPC, 커스텀 프로퍼티 |
| WAV RIFF 파싱 | 바이너리 오디오 데이터 -> AudioClip 변환 |
| GitHub Actions | 커밋 기반 이슈 자동화, 일일 보고서 생성 |
문서 구성
| 문서 | 내용 |
|---|---|
| 01-오디오-데이터-파이프라인 | WAV 바이너리 파싱, 웨이브폼 텍스처 생성, 비동기 로딩 |
| 02-노트-에디터-시스템 | 트랙/노트 데이터 관리, JSON 직렬화, 비동기 I/O |
| 03-VR-멀티플레이어 | XRPlayer 시스템, Photon 동기화, GitHub Actions 자동화 |















