Unity 게임 HUD 만들기 (체력 바, 미니맵, 점수 등)

2024. 12. 20. 01:04Unity

Unity 게임 HUD 만들기: 체력 바, 미니맵, 점수

게임 HUD(HUD: Heads-Up Display)는 게임 화면에 표시되는 정보를 나타내는 인터페이스 요소로, 플레이어가 현재 상태를 파악하고 게임을 진행하는 데 필요한 중요한 정보를 제공합니다. 이번 포스팅에서는 Unity를 사용하여 체력 바, 미니맵, 점수 시스템을 구현하는 방법을 알아봅니다.


1. HUD란 무엇인가?

HUD는 게임에서 중요한 상태와 정보를 화면에 표시하는 역할을 합니다.

  • 체력 바(Health Bar): 플레이어 또는 적의 체력을 시각적으로 표시.
  • 미니맵(Minimap): 현재 위치와 주변 환경 정보를 축소된 지도 형식으로 제공.
  • 점수(Score): 게임 플레이 동안 얻은 점수 표시.

이 외에도 탄약 수, 스킬 쿨다운, 타이머 등 다양한 요소가 포함될 수 있습니다.


2. 체력 바 만들기

1) 체력 바 UI 구성

  1. Canvas 생성.
  2. Hierarchy 창에서 UI > Image를 선택하여 체력 바의 배경을 생성.
    • RectTransform으로 배경 크기 설정.
  3. 배경 이미지의 자식으로 또 다른 Image를 추가하여 체력을 표시할 바를 생성.

2) 체력 바 동적 업데이트 스크립트

using UnityEngine;
using UnityEngine.UI;

public class HealthBar : MonoBehaviour
{
    public Image healthFillImage;
    private float currentHealth;
    private float maxHealth = 100f;

    void Start()
    {
        currentHealth = maxHealth;
        UpdateHealthBar();
    }

    public void TakeDamage(float damage)
    {
        currentHealth -= damage;
        currentHealth = Mathf.Clamp(currentHealth, 0, maxHealth);
        UpdateHealthBar();
    }

    void UpdateHealthBar()
    {
        healthFillImage.fillAmount = currentHealth / maxHealth;
    }
}
  • healthFillImage는 체력을 시각적으로 표시하는 Image 컴포넌트입니다.
  • fillAmount 속성을 활용해 체력 비율을 반영합니다.

3) 체력 바 적용

  • HealthBar 스크립트를 Canvas나 적 오브젝트에 연결.
  • 테스트를 위해 특정 키 입력 시 TakeDamage() 호출.

3. 미니맵 구현

1) 미니맵 UI 구성

  1. Canvas 생성.
  2. UI > Raw Image를 선택하여 미니맵 표시용 창 생성.
  3. Hierarchy 창에서 빈 GameObject를 생성하고 이를 Minimap Camera로 설정.
    • Minimap Camera의 ProjectionOrthographic으로 변경.
    • Culling Mask를 사용해 미니맵에 표시할 레이어만 렌더링하도록 설정.

2) Minimap Camera와 Raw Image 연결

  • Minimap CameraTarget Texture로 새로운 RenderTexture를 설정.
  • Raw Image의 Texture 속성에 해당 RenderTexture를 할당.

3) 플레이어 위치와 동기화

using UnityEngine;

public class Minimap : MonoBehaviour
{
    public Transform player;

    void LateUpdate()
    {
        Vector3 newPosition = player.position;
        newPosition.y = transform.position.y; // 높이는 고정
        transform.position = newPosition;
    }
}
  • Minimap Camera에 Minimap 스크립트를 추가하고 플레이어 Transform을 연결합니다.

4. 점수 시스템

1) 점수 UI 구성

  1. Canvas 생성.
  2. UI > Text - TextMeshPro를 선택하여 점수를 표시할 텍스트 추가.

2) 점수 스크립트 작성

using TMPro;
using UnityEngine;

public class ScoreManager : MonoBehaviour
{
    public TextMeshProUGUI scoreText;
    private int score = 0;

    void Start()
    {
        UpdateScoreUI();
    }

    public void AddScore(int amount)
    {
        score += amount;
        UpdateScoreUI();
    }

    void UpdateScoreUI()
    {
        scoreText.text = "Score: " + score;
    }
}

3) 점수 업데이트

  • AddScore()를 호출하여 점수를 증가시키고 UI를 업데이트합니다.
  • 예: 적을 처치하거나 아이템을 획득할 때 AddScore() 호출.

5. HUD 최적화 팁

  1. Canvas 설정
    • Canvas의 Render Mode를 필요에 맞게 설정합니다.
    • Screen Space - Overlay는 가장 일반적인 설정입니다.
  2. Prefab 활용
    • HUD 요소를 Prefab으로 만들어 재사용 가능하도록 설정합니다.
  3. UI 성능 최적화
    • UI 요소를 필요할 때만 활성화하여 렌더링 부담을 줄입니다.
    • 복잡한 UI를 구성할 때는 Canvas Group을 활용해 그룹화합니다.

6. 완성된 HUD 예제

체력 바 + 미니맵 + 점수 시스템을 하나의 Canvas에 통합한 간단한 HUD 예제를 구성해보세요.

  • 체력 바는 화면 상단에 배치.
  • 미니맵은 화면 구석에 배치.
  • 점수는 상단 중앙에 배치.

Hierarchy 구조 예시:

Canvas
├── HealthBar (Image)
├── Minimap (Raw Image)
├── ScoreText (TextMeshPro)

 


7. 요약

Unity의 HUD는 게임의 정보를 시각적으로 전달하는 중요한 도구입니다.

  • 체력 바를 통해 플레이어 상태를 나타냅니다.
  • 미니맵을 활용해 주변 환경 정보를 제공합니다.
  • 점수 시스템으로 플레이어의 진행 상태를 표시합니다.