본문 바로가기
게임 프로그래밍/게임개발 중급

게임개발 중급(61) - Monster Killer(23)

by jyppro 2023. 6. 25.

Monster Killer(23)

이전엔 몬스터 움직임에 따라 걷는 애니메이션을 연결시켜 주고, 다른 애니메이션과의 트랜지션이 자연스럽게 이루어 지도록 연결시켜주는 과정을 다뤄보았습니다. 이번엔 플레이어 체력이 0이 되었을 때 게임오버 화면과 재시작하는 UI를 만들어 보겠습니다.

 

게임오버 화면 만들기

UI 이미지를 사용해서 검은색으로 색상을 바꿔주고, 화면을 가득 채우도록 Rect Transform을 전체화면으로 고정시켜 줍니다. 그리고 텍스트를 추가해 GameOver를 입력해 줍니다. 저는 일단 투명도를 약간 조정해서 뒷 화면이 보이도록 만들어 주었습니다. 해당 화면에 게임을 재시작 할 수 있도록 Restart 버튼을 만들어 줍니다.

게임오버-화면
게임오버 화면

해당화면은 플레이어의 체력이 0이 되었을 때 등장해야 하므로 스크립트를 작성해 주어야 합니다.

 

GameOverUI

using System.Collections;
using UnityEngine;
using UnityEngine.UI;

public class GameOverUI : MonoBehaviour
{
    public float fadeDuration = 1f; // 페이드 인 시간
    private Image[] uiImages; // UI 이미지 배열

    private void Start()
    {
        uiImages = GetComponentsInChildren<Image>(); // 자식 오브젝트의 이미지 컴포넌트를 가져옴

        // 초기 상태에서 UI를 투명하게 설정
        foreach (var image in uiImages)
        {
            image.color = new Color(image.color.r, image.color.g, image.color.b, 0f);
        }

        // 페이드 인 코루틴 시작
        StartCoroutine(FadeIn());
    }

    private IEnumerator FadeIn()
    {
        // 페이드 인 시간 동안 알파 값을 증가시켜 페이드 인 효과 생성
        float elapsedTime = 0f;
        while (elapsedTime < fadeDuration)
        {
            float alpha = Mathf.Lerp(0f, 1f, elapsedTime / fadeDuration);
            foreach (var image in uiImages)
            {
                image.color = new Color(image.color.r, image.color.g, image.color.b, alpha);
            }

            elapsedTime += Time.deltaTime;
            yield return null;
        }
    }
}

플레이어의 체력이 0이 되었을 때, 게임오버 화면이 천천히 등장하도록 페이드 인을 만들어 줍니다. 그리고 이제 재시작버튼의 기능도 만들어 주어야 합니다.

 

RestartButton

using UnityEngine;
using UnityEngine.SceneManagement;

public class RestartButton : MonoBehaviour
{
    private void Start()
    {
        // 버튼 클릭 이벤트에 RestartGame 함수 연결
        GetComponent<UnityEngine.UI.Button>().onClick.AddListener(RestartGame);
    }

    private void RestartGame()
    {
        // 현재 씬을 다시 로드하여 게임을 재시작
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
}

재시작버튼은 버튼을 누르면, 씬을 다시 로드하는 방식으로 게임을 재시작할 수 있습니다. 이렇게 만들고 게임을 시작해서 플레이어가 죽도록 기다려보도록 하겠습니다.

 

게임 실행

게임오버
게임오버

이렇게 게임오버 화면이 등장하게 되고, 재시작 버튼을 누르면 다시 게임의 처음으로 돌아가게 됩니다.

 

<NEXT>

오늘은 플레이어의 체력이 0이 되었을 때, 게임오버되는 화면과 재시작버튼을 만들어 보았습니다. 다음에는 이전에 했던 몬스터 연결과정을 모든 몬스터에게 적용하는 과정을 하도록 하겠습니다. 감사합니다.