플레이어의 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 |