본문 바로가기
유니티/플랫폼 게임 만들기

유니티로 슈퍼마리오 같은 게임 만들기 #7 - 체력바와 게임 오버 화면 추가하기

by 찡사랑방 2024. 11. 4.
728x90
728x90

 

 

안녕하세요! 오늘은 게임의 완성도를 높여줄 UI 요소들을 추가해보겠습니다. 플레이어가 체력 상태를 확인할 수 있는 체력바와, 체력이 0이 되었을 때 표시되는 게임 오버 화면을 구현할 거예요. 이로써 게임 플레이의 몰입감과 편의성을 더욱 높여보겠습니다.

 

1. 플레이어 체력바 만들기

  1. UI 캔버스 생성
    • Hierarchy 창에서 UI > Canvas를 선택하여 새 캔버스를 생성합니다. 이 캔버스는 모든 UI 요소를 포함하는 상위 객체입니다.
  2. 슬라이더로 체력바 구성
    • 캔버스 하위에 UI > Slider를 추가합니다. 이 슬라이더를 플레이어의 체력바로 사용할 것입니다.
    • 슬라이더의 Fill Area 속성을 조정하여 체력에 따라 채워지는 영역이 잘 표시되도록 설정합니다.
  3. HealthBar 스크립트 작성
    • Assets > Scripts 폴더에 HealthBar라는 C# 스크립트를 생성하고, Slider 오브젝트에 추가합니다.
    • HealthBar 스크립트는 플레이어의 체력 상태를 UI에 반영하는 역할을 합니다.
using UnityEngine;
using UnityEngine.UI;

public class HealthBar : MonoBehaviour
{
    public Slider slider;

    public void SetMaxHealth(int maxHealth)
    {
        slider.maxValue = maxHealth;
        slider.value = maxHealth;
    }

    public void SetHealth(int health)
    {
        slider.value = health;
    }
}

 

4. HealthManager 스크립트와 연결

  • 이전에 작성한 HealthManager 스크립트에서 HealthBar를 참조하여, 체력이 감소할 때마다 체력바에 반영되도록 합니다.
using UnityEngine;

public class HealthManager : MonoBehaviour
{
    public int maxHealth = 3;
    private int currentHealth;
    public HealthBar healthBar;

    void Start()
    {
        currentHealth = maxHealth;
        healthBar.SetMaxHealth(maxHealth);
    }

    public void TakeDamage(int damage)
    {
        currentHealth -= damage;
        healthBar.SetHealth(currentHealth);

        if (currentHealth <= 0)
        {
            Die();
        }
    }

    void Die()
    {
        Debug.Log("Game Over!");
        // 추후 게임 오버 화면 표시로 연결
    }
}

 

  • Start() 메서드에서 초기 체력을 설정하며, TakeDamage 메서드에서 체력이 감소할 때마다 healthBar의 상태를 업데이트합니다.

 

2. 게임 오버 화면 만들기

  1. 게임 오버 텍스트 생성
    • Canvas 안에 UI > Text를 추가하여 Game Over 텍스트를 만듭니다. 이 텍스트는 게임 오버 상태에서만 보이도록 설정할 것입니다.
    • 텍스트의 Font Size Color를 조정하여 눈에 잘 띄게 디자인합니다.
  2. GameOverManager 스크립트 작성
    • GameOverManager라는 새로운 스크립트를 만들고 Game Over Text 오브젝트에 연결합니다.
using UnityEngine;
using UnityEngine.SceneManagement;

public class GameOverManager : MonoBehaviour
{
    public GameObject gameOverUI;

    public void GameOver()
    {
        gameOverUI.SetActive(true);
    }

    public void RestartGame()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
}

 

  • GameOver() 메서드는 게임 오버 UI를 활성화하고, RestartGame() 메서드는 현재 씬을 다시 로드하여 게임을 리스타트할 수 있게 합니다.

  3. HealthManager와 게임 오버 UI 연결

  • HealthManager의 Die() 메서드에서 GameOverManager를 호출하여 체력이 0일 때 게임 오버 UI가 나타나도록 연결합니다.
using UnityEngine;

public class HealthManager : MonoBehaviour
{
    public int maxHealth = 3;
    private int currentHealth;
    public HealthBar healthBar;
    public GameOverManager gameOverManager;

    void Start()
    {
        currentHealth = maxHealth;
        healthBar.SetMaxHealth(maxHealth);
    }

    public void TakeDamage(int damage)
    {
        currentHealth -= damage;
        healthBar.SetHealth(currentHealth);

        if (currentHealth <= 0)
        {
            Die();
        }
    }

    void Die()
    {
        Debug.Log("Game Over!");
        gameOverManager.GameOver();
    }
}

 

 

  • gameOverManager.GameOver()가 호출되면 게임 오버 UI가 나타납니다.

 

3. 게임 오버 UI에 버튼 추가

  1. 재시작 버튼 추가
    • Canvas 안에 UI > Button을 추가하고 Restart라는 텍스트를 설정합니다.
    • 이 버튼에 GameOverManager RestartGame 메서드를 연결하여 게임을 다시 시작할 수 있도록 합니다.
  2. 버튼 디자인 및 위치 조정
    • Restart 버튼의 Font, Color 등을 조정하여 게임 오버 화면과 어울리게 디자인합니다.
    • 버튼과 텍스트의 위치를 적절히 배치하여 화면 중앙에 깔끔하게 나타나도록 합니다.

 

4. 테스트 및 조정

  1. Play 모드에서 체력바 및 게임 오버 UI 테스트
    • 플레이 모드에서 체력이 감소할 때 체력바가 제대로 반영되는지 확인합니다.
    • 플레이어의 체력이 0이 되었을 때 Game Over 텍스트와 Restart 버튼이 제대로 나타나는지 확인합니다.
  2. UI 최적화
    • 각 UI 요소의 크기, 위치, 색상 등을 조정하여 게임 화면과 잘 어울리도록 디자인합니다.
728x90