VR 코딩 교육
Unity VR 튜토리얼 18편
goodworld-info
2025. 7. 19. 11:26
🔄 VR 게임 재시작 & 홈 화면 UI 구성하기 – XR 컨트롤러 버튼 클릭 시스템
Meta Quest / PCVR 대응
Unity XR Interaction Toolkit 기반
게임 종료 후 유저가 직접 다시 시작하거나 메인으로 이동하는 UI를 구성합니다.
“게임의 마지막 인상도 사용자 경험이다”
게임은 끝났지만, 유저 경험은 거기서 끝나지 않습니다.
다시 도전하고 싶게 만들 것인지,
홈 화면으로 돌아가게 할 것인지는
게임 종료 후 제공되는 UI 선택지에 달려 있습니다.
이번 튜토리얼에서는
- VR 컨트롤러로 조작 가능한
- "다시 시작" 버튼
- "메인 메뉴로 이동" 버튼
을 갖춘 완성형 종료 UI 패널을 만들고,
씬 전환까지 구현해봅니다.
✅ 구현할 기능 요약
기능설명
게임 종료 후 UI 패널 표시 | GameOverPanel 또는 StatsPanel에 포함 |
XR 컨트롤러로 버튼 클릭 가능 | XR Ray Interactor 기반 |
다시 시작 시 현재 씬 재시작 | SceneManager.LoadScene() |
홈으로 이동 시 다른 씬 로딩 | 메인 메뉴 씬으로 전환 |
🛠️ Step 1. UI 패널에 버튼 추가
- Canvas > Panel 생성 → 이름: GameOverPanel (또는 StatsPanel)
- 내부에 버튼 2개 추가:
- UI > Button - TextMeshPro
- 버튼 이름: RestartButton, HomeButton
- 텍스트 설정:
- RestartButton → "다시 시작하기"
- HomeButton → "메인 메뉴로"
🧷 Step 2. XR 컨트롤러 클릭 가능하게 만들기
- LeftHand Controller 또는 RightHand Controller 선택
- XR Ray Interactor 추가 (또는 이미 있다면 유지)
- Line Visual 컴포넌트 추가 → 클릭 가능한 레이저 선
- XR Interaction Manager가 반드시 존재해야 함
- Event System 존재 확인:
- Input System UI Input Module 설정 완료 상태여야 함
✅ 이제 컨트롤러로 버튼을 가리면 → 트리거 누르면 클릭 가능!
📄 Step 3. 버튼 스크립트 작성
📄 VRGameUIManager.cs
using UnityEngine;
using UnityEngine.SceneManagement;
public class VRGameUIManager : MonoBehaviour
{
public void RestartGame()
{
Time.timeScale = 1;
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
public void GoToMainMenu()
{
Time.timeScale = 1;
SceneManager.LoadScene("MainMenu");
}
}
using UnityEngine.SceneManagement;
public class VRGameUIManager : MonoBehaviour
{
public void RestartGame()
{
Time.timeScale = 1;
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
public void GoToMainMenu()
{
Time.timeScale = 1;
SceneManager.LoadScene("MainMenu");
}
}
✅ 메인 메뉴 씬 이름은 "MainMenu"로 저장되어 있어야 함
→ 빌드 세팅 (File > Build Settings)에서 씬 추가 필수
→ 빌드 세팅 (File > Build Settings)에서 씬 추가 필수
🔗 Step 4. 버튼에 함수 연결하기
- RestartButton 선택
- Button > On Click()
-
- 버튼 클릭
- VRGameUIManager 오브젝트 Drag
- 함수 선택: RestartGame()
-
- HomeButton도 동일한 방식으로
- 함수 선택: GoToMainMenu()
📘 선택: 메인 메뉴 씬 구성 (간단하게)
- 새 씬 생성 → MainMenu.unity로 저장
- UI 패널 구성:
- 타이틀 (TextMeshPro)
- 시작 버튼 ("게임 시작하기" → SceneManager.LoadScene("GameScene"))
- 종료 버튼 (Application.Quit())
🧪 테스트 체크리스트
항목확인 여부
게임 종료 시 UI 패널이 뜬다 | ✅ |
버튼에 XR 레이저가 반응한다 | ✅ |
트리거 클릭 시 함수가 작동한다 | ✅ |
재시작 버튼 누르면 게임이 초기화됨 | ✅ |
홈으로 이동 시 MainMenu로 전환됨 | ✅ |
💡 확장 팁
기능설명
버튼에 사운드 추가 | AudioSource.PlayOneShot() |
선택 효과 애니메이션 | Animator 또는 DOTween 사용 |
버튼 누른 후 페이드아웃 연출 | CanvasGroup 사용 fade-out |
UI 패널에 "게임 클리어!" 문구 추가 | 성공 여부에 따라 텍스트 다르게 |
📘 구조 예시
Canvas
└─ GameOverPanel
├─ RestartButton
├─ HomeButton
└─ VRGameUIManager.cs
XR Origin
├─ LeftHand Controller (XR Ray Interactor)
└─ EventSystem (Input System UI Module)
📘 다음 튜토리얼 예고 – 19편
🎨 VR 게임 UI 디자인 개선하기 – 시각적으로 예쁜 HUD와 애니메이션 적용하기