2026-05-15 05:12:40 +00:00
2026-05-05 03:28:26 +09:00
2026-05-11 17:27:04 +09:00
2026-05-11 17:27:04 +09:00
2026-05-05 00:33:37 +09:00
2026-04-14 18:02:07 +09:00
2026-04-14 18:02:07 +09:00
2026-04-16 04:58:10 +09:00
2026-05-15 05:12:40 +00:00

VR 장보기 시뮬레이션 (Shopping VR)

Unity 6 · XR Interaction Toolkit 기반 1인칭 VR 장보기 게임. 장보기 목록대로 매장에서 상품을 골라 셀프 계산대에서 결제하고, NPC와 대화하며 시식·포만감 관리까지 수행한다.


플레이 영상


프로젝트 정보

개발 기간 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

게임 진행

  1. GameStartScene — 시작 화면에서 게임 진입 (비동기 로딩)
  2. GameScene (매장) — 좌측 컨트롤러 Primary 버튼으로 장보기 목록 펼치기
  3. 상품 픽업 — XR Direct Interactor로 상품을 잡아 카트에 넣음.
  4. 셀프 계산대 — 바코드로 상품을 스캔하면 항목이 행으로 추가됨, 합계 자동 갱신
  5. 결제 — 예산에서 차감 → 장보기 목록 충족 검사 → Clear / Missing 패널 분기
  6. 부가 시스템 — 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
장보기 시뮬레이션
Readme 4.3 GiB
Languages
C# 90.5%
ShaderLab 3.1%
HLSL 2.7%
GLSL 1.6%
C++ 1.5%
Other 0.6%