본문 바로가기
공부/Unity 기초

3D FPS - 8 / 게임 오버 처리

by svcbn 2022. 5. 19.

플레이어의 HP가 0이 되면 화면이 까맣게 되면서 “Game Over”라는 붉은 색 텍스트가 표시되는 기능을 구현한다.
이 때 “Game Over” 텍스트는 화면이 검정색이 된 후 1초 뒤에 표시되게 한다.
플레이어의 HP가 0이 되면 Hit 효과는 실행되지 않아야 한다.

 

GameOver에 사용할 UI 이미지와 종속된 Text를 만든다.

 

 

 

 

 

 

PlayerHP가 0이 되면 HitManager의 GameOver UI를 불러온다.

// 만일, 플레이어의 체력이 0보다 크다면
        if (HP > 0)
        {

            // 체력을 감소시킨다.
            HP -= 1;

            // HitManager의 Hit 함수를 호출하고싶다.
            HitManager.instance.Hit();

            // 만일, 플레이어의 체력이 0이하라면
            if (HP <= 0)
            {
                // 기존에 예약된 피격 효과 코루틴을 모두 종료한다.
                HitManager.instance.StopAllCoroutines();

                // HitManager 클래스에 있는 GameOver UI를 표시한다.
                HitManager.instance.ShowGameOver();
            }


        }

 

 

PlayerHP 전문

더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;





public class PlayerHP : MonoBehaviour
{
    int hp;
    public int maxHP = 3;
    public Slider sliderHP;

    // 체력이 변경되면 UI에도 반영하고싶다.
    // property
    public int HP
    {
        get { return hp; }
        set
        {
            hp = value;
            sliderHP.value = value;
        }
    }

    // 적이 플레이어를 공격할 때 체력을 감소하고싶다.
    public void AddDamage()
    {
        // 만일, 플레이어의 체력이 0보다 크다면
        if (HP > 0)
        {

            // 체력을 감소시킨다.
            HP -= 1;

            // HitManager의 Hit 함수를 호출하고싶다.
            HitManager.instance.Hit();

            // 만일, 플레이어의 체력이 0이하라면
            if (HP <= 0)
            {
                // 기존에 예약된 피격 효과 코루틴을 모두 종료한다.
                HitManager.instance.StopAllCoroutines();

                // HitManager 클래스에 있는 GameOver UI를 표시한다.
                HitManager.instance.ShowGameOver();
            }


        }
    }

    // Start is called before the first frame update

    // 태어날때 체력을 최대체력으로 하고싶다.
    void Start()
    {
        sliderHP.maxValue = maxHP;
        HP = maxHP;
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

 

 

 

 

 

 

 

HitManager에 GameOverUI를 출력할 함수를 만들고

public void ShowGameOver()
    {
        StartCoroutine("ShowGameOverUI");

    }

 

 

GameOverUI 코루틴을 만든다

검은 화면으로 바뀌고 1초 뒤 GameOver text가 나오게 한다.

IEnumerator ShowGameOverUI()
    {
        // 게임 오버 배경과 텍스트 오브젝트를 활성화한다.
        ImageGameOver.SetActive(true);

        // 1초간 쉰다.
        yield return new WaitForSeconds(1.0f);


        textGameOver.SetActive(true);
    }

 

 

 

HitManager 전문

더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


// 태어날 때 ImageHit를 보이지 않게 하고싶다.
// 적이 플레이어를 공격했을 때 ImageHit를 깜빡이게 하고싶다.

public class HitManager : MonoBehaviour
{

    public GameObject imageHit;
    public static HitManager instance;
    public GameObject ImageGameOver;
    public GameObject textGameOver;

    private void Awake()
    {
        instance = this;
    }

    // Start is called before the first frame update
    void Start()
    {
        // 태어날 때 imageHit 를 보이지 않게 하고싶다.
        imageHit.SetActive(false);

    }

    public void Hit()
    {
        // 깜빡거리고싶다.
        StartCoroutine("IeHit");
        

    }

    IEnumerator IeHit()
    {
        // imgaHit를 보이게 하고 싶다
        imageHit.SetActive(true);

        // 0.1초 후에
        yield return new WaitForSeconds(0.1f);

        // imageHit를 안 보이게 하고 싶다.
        imageHit.SetActive(false);

    }

    // Update is called once per frame
    void Update()
    {
     
    }


    // GameOver UI를 출력하는 함수
    public void ShowGameOver()
    {
        StartCoroutine("ShowGameOverUI");

    }

    IEnumerator ShowGameOverUI()
    {
        // 게임 오버 배경과 텍스트 오브젝트를 활성화한다.
        ImageGameOver.SetActive(true);

        // 1초간 쉰다.
        yield return new WaitForSeconds(1.0f);


        textGameOver.SetActive(true);
    }
}

 

 

'공부 > Unity 기초' 카테고리의 다른 글

3D FPS - 10 / 적 생성 유지  (0) 2022.05.21
3D FPS - 9 / 네비게이션 알고리즘으로 길찾기  (0) 2022.05.21
3D FPS - 7 / 피격 처리  (0) 2022.05.19
3D FPS - 6 / 위치 복귀  (0) 2022.05.19
3D FPS - 5 / 상태머신 설계  (0) 2022.05.18