
🎨 VR 게임 UI 디자인 개선 – 시각적으로 예쁜 HUD와 애니메이션 적용하기
Meta Quest / PCVR 대응
Unity XR Interaction Toolkit + TextMeshPro 기반
단순한 UI를 **몰입형 HUD(Head-Up Display)**로 업그레이드하는 방법
🧠 "VR 게임에서 UI는 HUD가 전부다"
PC 게임에서는 UI가 화면 한쪽에 붙어 있어도 플레이에 지장이 없습니다.
하지만 VR 게임은 다릅니다.
- 화면 어디를 보느냐
- 플레이어의 시야를 가리지 않느냐
- UI가 자연스럽게 움직이느냐
 이 모든 것이 게임 몰입감과 직결됩니다.
이번 튜토리얼에서는 단순 텍스트 UI를 벗어나
시선 추적형 HUD + 부드러운 애니메이션 효과까지 구현합니다.
✅ 목표 기능
| 플레이어 시야 앞에 HUD 고정 | 카메라에 따라 UI 이동 | 
| 점수 / 체력 / 타이머 표시 | TextMeshPro HUD 구성 | 
| UI 애니메이션 적용 | Scale, Fade 효과 추가 | 
| 중요 이벤트 시 강조 표시 | 색상 변환 및 크기 변화 | 
🛠 Step 1. HUD Canvas 만들기
- Canvas 생성 → Render Mode: World Space
- 크기: Width: 1000, Height: 500
- 카메라 앞에 배치:
- Position: (0, 0, 2) (플레이어 기준 2m 앞)
 
- CanvasScaler → UI Scale Mode: Scale With Screen Size
🧷 Step 2. 카메라에 HUD 고정 스크립트
📄 HUDFollowCamera.cs
using UnityEngine; 
public class HUDFollowCamera : MonoBehaviour 
{ 
    public Transform vrCamera; 
    public float distance = 2f; 
    public Vector3 offset; 
    void LateUpdate() 
    { 
        transform.position = vrCamera.position + vrCamera.forward * distance + offset; 
        transform.rotation = Quaternion.LookRotation(transform.position - vrCamera.position); 
    } 
} 
✅ vrCamera에 Main Camera(XR Origin 하위) 연결
🖋 Step 3. HUD UI 구성
HUD 안에 표시할 항목:
- 점수 (ScoreText)
- 체력 (HealthText)
- 타이머 (TimerText)
📄 TextMeshPro 예시:
Score: 0 
Health: 100% 
Time: 02:35 
✨ Step 4. UI 애니메이션 추가
📄 UIAnimator.cs
using UnityEngine; 
public class UIAnimator : MonoBehaviour 
{ 
    public AnimationCurve scaleCurve; 
    public float duration = 0.5f; 
    public void PlayScaleAnimation() 
    { 
        StopAllCoroutines(); 
        StartCoroutine(ScaleRoutine()); 
    } 
    private System.Collections.IEnumerator ScaleRoutine() 
    { 
        float time = 0; 
        Vector3 originalScale = transform.localScale; 
        while (time < duration) 
        { 
            float scale = scaleCurve.Evaluate(time / duration); 
            transform.localScale = originalScale * scale; 
            time += Time.deltaTime; 
            yield return null; 
        } 
        transform.localScale = originalScale; 
    } 
} 
- scaleCurve 예시: (0, 1) → (0.5, 1.3) → (1, 1)
- 이벤트 발생 시 UI 커짐 → 부드럽게 원래 크기로 돌아감
🔴 Step 5. 이벤트와 연동
📄 GameEventsUI.cs
using UnityEngine; 
using TMPro; 
public class GameEventsUI : MonoBehaviour 
{ 
    public TextMeshProUGUI scoreText; 
    public UIAnimator scoreAnimator; 
    private int score; 
    public void AddScore(int amount) 
    { 
        score += amount; 
        scoreText.text = "Score: " + score; 
        scoreAnimator.PlayScaleAnimation(); 
    } 
} 
- 점수가 올라가면 → 숫자가 변하고 애니메이션 재생
- 체력 감소나 타이머 경고도 같은 방식으로 적용 가능
🎯 Step 6. 색상 강조 효과
using UnityEngine; 
using TMPro; 
public class UIColorEffect : MonoBehaviour 
{ 
    public TextMeshProUGUI text; 
    public Color normalColor = Color.white; 
    public Color alertColor = Color.red; 
    public float flashDuration = 0.2f; 
    public void FlashAlert() 
    { 
        StartCoroutine(FlashRoutine()); 
    } 
    private System.Collections.IEnumerator FlashRoutine() 
    { 
        text.color = alertColor; 
        yield return new WaitForSeconds(flashDuration); 
        text.color = normalColor; 
    } 
} 
} 
체력이 낮아질 때 빨간색으로 깜빡이게 적용 
📘 최종 구조 예시
XR Origin 
 ├─ Main Camera 
 │    └─ HUD Canvas 
 │         ├─ ScoreText (UIAnimator.cs) 
 │         ├─ HealthText 
 │         └─ TimerText 
 ├─ HUDFollowCamera.cs 
 └─ GameEventsUI.cs 
💡 확장 아이디어
| 아이콘 HUD 추가 | 체력바, 방패 아이콘, 총알 수 | 
| 투명도 조절 | 필요 없을 때 HUD 자동 숨김 | 
| 시야 추적 미니맵 | 카메라 회전과 함께 움직이는 3D 미니맵 | 
| 음성 안내와 결합 | UI 변동 시 TTS 안내 추가 | 
📜 마무리
이번 19편에서는
VR 게임에 필수적인 HUD 시스템을
- 시선 추적
- 애니메이션 효과
- 색상 강조
 까지 적용했습니다.
다음 20편에서는
**"VR 게임 타이머 & 미션 시스템 구현"**을 다뤄서
HUD와 실시간으로 연동하는 방법을 알려드리겠습니다.
'VR 코딩 교육' 카테고리의 다른 글
| Unity VR 튜토리얼 18편 (1) | 2025.07.19 | 
|---|---|
| Unity VR 튜토리얼 17편 (0) | 2025.07.19 | 
| Unity VR 튜토리얼 16편 (0) | 2025.07.19 | 
| Unity VR 튜토리얼 15편 (0) | 2025.07.03 | 
| Unity VR 튜토리얼 14편 (0) | 2025.06.30 | 
 
                    
                   
                    
                   
                    
                  