이 게임에서 플레이어가 죽는 경우는
- 체력이 0 이하가 되었을 때
- 땅 밑으로 떨어졌을 때
위 두 가지 경우로 나눌 수 있는데요. 이번 포스팅에서는 죽으면 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을 불러오는 것보다는 변수들을 초기화하고, 필요한 프리펩만 새로 생성하는 함수를 만들어서 로딩을 최소한으로 줄이는 게 좋을 것 같습니다.
애니메이션 설정
실행 화면
반응형
'유니티 게임 개발' 카테고리의 다른 글
[유니티 강좌] 2D RPG 게임 만들기 - 16 / 스테이터스 클래스 정리하기 (15) | 2021.05.13 |
---|---|
[유니티 강좌] 2D RPG 게임 만들기 - 14 / 사운드 (0) | 2021.03.28 |
[유니티 강좌] 2D RPG 게임 만들기 - 13 / 함정 (0) | 2021.03.24 |
[유니티 강좌] 2D RPG 게임 만들기 - 12 / 아이템 (6) | 2021.03.24 |
[유니티 강좌] 2D RPG 게임 만들기 - 11 / 간단한 적 AI (5) | 2021.03.21 |
댓글