본문 바로가기
유니티 게임 개발

[유니티 강좌] 2D RPG 게임 만들기 - 15 / 플레이어의 죽음

by 호일이 2021. 5. 2.

 

이 게임에서 플레이어가 죽는 경우는

  1. 체력이 0 이하가 되었을 때
  2. 땅 밑으로 떨어졌을 때

위 두 가지 경우로 나눌 수 있는데요. 이번 포스팅에서는 죽으면 die 애니메이션을 실행하고, 게임을 재시작 하는 것까지 구현해보겠습니다.

 

 

스크립트

코드는 sword_man.cs에 추가해주세요.

using UnityEngine.SceneManagement; // 클래스 위에 적기


bool isSwordManDead = false;

void Start()
{
    ~~~ // 기존 코드 밑에
    StartCoroutine(CheckSwordManDeath());
}

void Update()
{
    if (isSwordManDead) return; // 조작 못하게 하기
    ~~~ // 기존 코드 위에
}

IEnumerator CheckSwordManDeath()
{
    while(true)
    {
        // 땅 밑으로 떨어졌다면
        if(transform.position.y < -8)
        {
            SceneManager.LoadScene("Main"); // Scene 재시작
        }

        // 체력이 0이하일 때
        if (nowHp <= 0)
        {
            isSwordManDead = true;
            animator.SetTrigger("die");
            yield return new WaitForSeconds(2); // 2초 기다리기
            SceneManager.LoadScene("Main");
        }
        yield return new WaitForEndOfFrame(); // 매 프레임의 마지막 마다 실행
    }
}

SceneManager.LoadScene("Scene 이름") <- 큰 따옴표 안에 재시작할 Scene 이름을 적어야 합니다.

 

코드 설명

죽었을 때 die 애니메이션을 재생하는 시간 동안 대기해야 하기 때문에 간편하게 대기할 수 있는 코루틴을 사용했습니다.

땅에 떨어져서 죽을 때는 2초를 대기를 하면 너무 오래 떨어지게 되니 바로 재시작 되게 만들었습니다.

 

위 코드에서 게임을 재시작할 때 SceneManager.LoadScene 함수로 Scene을 다시 불러와서 재시작했는데요. 이 프로젝트같이 불러오는 게 별로 없는 게임은 저렇게 해도 별로 렉이 걸리지 않지만 규모가 커질수록 이 방식은 피하는 게 좋습니다. Scene을 불러올 때 로딩을 오래 기다릴 정도의 규모라면 Scene을 불러오는 것보다는 변수들을 초기화하고, 필요한 프리펩만 새로 생성하는 함수를 만들어서 로딩을 최소한으로 줄이는 게 좋을 것 같습니다.

 

애니메이션 설정

die trigger 추가

 

Any State -> Die

 

Die 애니메이션 Loop Time 체크 해제

 

실행 화면

함정에 닿아서 죽음

 

Enemy에게 맞아서 죽음

 

땅에 떨어져서 죽음

 

반응형

댓글