a35b7f8b170fb01d5b6bff542671355ddebca889
VR 장보기 시뮬레이션 (Shopping VR)
Unity 6 · XR Interaction Toolkit 기반 1인칭 VR 장보기 게임. 장보기 목록대로 매장에서 상품을 골라 셀프 계산대에서 결제하고, NPC와 대화하며 시식·포만감 관리까지 수행한다.
데모 영상
- 메인 데모(2분): 업로드 예정
- 하이라이트(30초): 업로드 예정
- 빌드(.apk, Quest 사이드로드): 업로드 예정
프로젝트 정보
| 개발 기간 | 2026.04 ~ 2026.05 |
| 인원 | 1인 (기획·개발·일부 에셋 통합) |
| 플랫폼 | Meta Quest (Android XR / OpenXR), PC VR |
| 엔진 | Unity 6000.3.9f1 · URP 17.3 |
| 주요 패키지 | XR Interaction Toolkit 3.3, XR Hands 1.7, OpenXR 1.16, Oculus XR 4.5 |
게임 진행
- GameStartScene — 시작 화면에서 게임 진입 (비동기 로딩)
- GameScene (매장) — 좌측 컨트롤러 Primary 버튼으로 장보기 목록 펼치기
- 상품 픽업 — XR Direct Interactor로 상품을 잡아 카트에 넣음.
- 셀프 계산대 — 바코드로 상품을 스캔하면 항목이 행으로 추가됨, 합계 자동 갱신
- 결제 — 예산에서 차감 → 장보기 목록 충족 검사 → Clear / Missing 패널 분기
- 부가 시스템 — NPC 대화 시스템, 포만감 시스템
핵심 기능
1. 장보기 목록 미션 시스템
- 아이템 데이터는 상품 ID·브랜드·
ItemCategory(과일/유제품/스낵 등)·ProductGroup(브랜드별 구체 상품)으로 구성. 카테고리는 매대 분류용, 그룹은 미션 매칭용으로 의도적으로 두 단계로 나눔. - 장보기 목록을 SO로 데이터화. 목록을 직접 인스펙터에서 추가할 수 있으며, 차후 랜덤으로 변경 예정.
2. 셀프 계산대
- 스캔 영역 콜라이더로 충돌체들 수집한 뒤, 가장 가까운 상품 한 개만 스캔.
- 스캔할 때마다 계산목록에 하나씩 추가되며, 추가 버튼과 감소 버튼으로 수량 조절 가능.
- 결제시 미션 목록과 비교하여, 부족할 시 부족분을 보여주고 만족할시 클리어.
3. NPC 대화·립싱크 시스템
- NPC에 상호작용 할 시, 대화 발생.
- NPC는 '녹음되어 있는 음성'으로 정보를 전달하며, 특정 대사에 시선, 표정, 제스처를 부여할 수 있음.
- NPC의 대사 중에는 '선택'을 요구하는 경우가 있으며, 임의의 선택지를 선택시 해당 선택지가 가지고 있는 대화노드로 점프함.
- 블렌드셰이프 립싱크 — 입 관련 블렌드셰이프 7종에 가중치 분배. 오디오 소스의 실시간 소리 진폭에 기반하여
LateUpdate에서 표정Animator를 덮어씀.
4. 플레이어 시스템
- 손 마다 각각 상품을 잡으면, 상품의 정보가 캔버스UI로 보여짐. 양손으로 가격 비교 가능.
- 시간이 흐르면서 포만감 게이지 감소. 0이 되면 이동속도 대폭감소하며, 시식으로 포만감 회복 시 원본 속도 복구.
- '예산'이 존재하며, 예산보다 큰 금액의 결제를 막음.
5. 카트 시스템
- 해당 영역에 아이템이 들어오면, 아이템의 움직임이 없어질 때(혹은 0.3초가 지났을 때) 물리영향을 끄고 카트의 움직임을
ParentConstraint로 추적. - 이렇게 해야 카트와 아이템이 따로 움직이지 않고, 물건 위에 물건이 쌓였을 때의 버그가 없었음.
6. 씬 전환 커스텀 사이클
ISceneInitializable인터페이스 — 씬을 가로지르는 매니저(SceneLoadManager)가 새 씬 로드 직후 씬 내의 모든ISceneInitializable를 전부 찾아OnSceneLoaded()를 호출함.
아키텍처
Managers (DontDestroyOnLoad, 싱글톤)
├─ GameManager 게임관리 및 매니저 결선
├─ InputManager 입력
├─ SoundManager BGM / SFX / VOICE
└─ SceneLoadManager 씬 전환, ISceneInitializable 알림
│
▼
Scene-local
├─ LocalManager
├─ UIManager
├─ Player
└─ Item
│
▼
Data (ScriptableObject)
├─ ItemData / ShoppingOrderList / ShoppingOrderEntry
├─ DialogGroup / DialogNode / DialogChoice / VoiceClip
└─ CharacterData / ExpressionData / GestureData
사용한 외부 에셋
| 분류 | 에셋 | 용도 |
|---|---|---|
| XR | XR Interaction Toolkit, XR Hands, OpenXR, Oculus XR | 컨트롤러·핸드 인터랙션 기반 |
| XR 확장 | MikeNspired XRI Starter Kit | Climbing, DistanceGrab, HandPoser |
| 캐릭터 | BoZo Modular Anime Characters | NPC 모델·블렌드셰이프 |
| 의상 시뮬 | Magica Cloth 2 | 옷·머리카락 물리 |
| 셰이딩 | RealToon, Umbra Soft Shadows, BadDog AreaLight | 툰 셰이딩·소프트 섀도우 |
| 인터랙션 피드백 | HighlightPlus, Outline Plus | Hover/Grab 외곽선 |
| VFX | CartoonVFX9X | 스캔·결제 이펙트 |
빌드 / 실행
요구 사항
- Unity 6000.3.9f1
- (Quest 빌드) Android Build Support, OpenXR Loader: Meta Quest
Description
Languages
C#
90.5%
ShaderLab
3.1%
HLSL
2.7%
GLSL
1.6%
C++
1.5%
Other
0.6%
