-
안녕하세요.
오늘은 간단한 맵 구성과 함께
플레이어가 맵에서 추락 시 닿으면
죽는 동작 구현을 함께 알아보겠습니다.
이 죽는 동작구현의 코드는, 플레이어의 하트가 모두 소진되었을 시에도
실행시켜 주어 같은 동작이 되게끔 하였습니다.
바로 이런.. 동작이 연출됩니다.
첫 번째 작업은 간단한 큐브 맵 이미지를 이어 붙여서
그 위에 CatEnemy들을 올려 두었습니다.
이후 이 맵 아래에
DeathZone을 설치하여
플레이어가 맵에서 이탈되어 추락 시
죽은 상태가 되게 구현을 해 주었습니다.
새로 생성한 PlayerDeath 스크립트입니다.
간단히 이 콜라이더에 충돌체 검사를
OnCollisionEnter로 받아 충돌 시 이벤트가 실행되게 해 주었으며
collision의 게임 오브젝트 태그가 Player일 시 Restart함수를 실행해 줍니다.
(함수를 따로 구현해놓은 이유는, 따른 곳에서도 접근을 하게 하기 위함입니다.
현재 사용된 곳을 예로 보자면 DeathZone과 충돌을 하지 않더라도
Player의 하트가 0이 되면 이 Restart함수가 실행되어 플레이어의 죽음을 나타내어 줍니다.)
Restart함수에서는 StartCorutine로 RestartProcess 코 루틴 함수를 실행시켜 줍니다.
(코 루틴 함수를 작성한 이유는, 즉시 실행되지 않고 일정 시간을 기다린 후 씬 재 로드를 하기 위함입니다.)
코 루틴 함수 RestartProcess를 보자면
첫 번째 PlayerMovement에 있는 PlayerDie함수입니다.
중복 방지를 위해 isDie : 죽었는지 체크할 불 변수로 체크를 해 주는 모습이며.
PlayOneShot으로 사운드를 재생해 주는 모습입니다.
여기서 layer를 12로 바꾼 이유는
플레이어가 죽었을 시 (누웠을 시) 다른 충돌 판정을 받을 오브젝트에게 부딪히면
나타나는 효과를 없애주기 위함입니다.
(layer가 12(PlayerDmage)의 상태가 되면 충돌 판정을 일어나지 않게 지난 글에 설정을 해놓았습니다.)
코 루틴 함수 RestartProcess를 이어서 보자면
SceneManager.LoadScene를 이용해
현재 씬 (SceneManager.GetActiveScene(). buildIndex)을 재 로드해줍니다.
즉 5초의 시간을 기다 린 뒤 초기와 같은 상태로 돌아오게 됩니다.
이후 PlayerMovement의 isDie는 다시 fasle로 바꿔 주어
플레이어가 죽지 않은 상태임을 알려 줍니다.
이 Restart함수는 플레이어의 하트가 모두 소진됐을 시 에도
실행시키게 동작 구현을 해 두었습니다.
PlayerHit 스크립트에 있는 PlayerHitHeart 함수에
하트가 0이 되었을 시
Restart의 함수를 실행되게 해 놓았습니다.
한 가지 추가로
테스트를 보다 편하게 하기 위하여
OnClickJumpBtn 함수 (점프)의 실행을
PlayerMovement스크립트의 Update함수에 추가를 시켜 주었습니다.
즉 Jump (Spacebar)로 점프가 가능하게 됐으며
playerMove 담당 코드는 isDie가 false 일 때 '만' 실행되는 코드를
이때 작성해 주었습니다.
마지막으로 맵에 다리를 만들어
플레이어의 점프를 이용한 환경을 만들어 주었습니다.
00 : 50초 이것으로 플레이어가 DeathZone에 충돌하게 되면
플레이어의 Die 동작을 구현하고
씬이 재 로드되는 부분을 보았습니다.
다음 글에선 플레이어의 이동 부분에 대해 추가적인 부분을 알아보겠습니다.
감사합니다.
'팀업 프로젝트 > C.C.I' 카테고리의 다른 글
CCI - 11 - 장애물 (0) 2022.05.16 CCI - 10 - 플레이어 이동구현_2 & 화면회전 (0) 2022.05.15 CCI - 08 - 플레이어 피격모션 (0) 2022.05.14 CCI - 07 - 적 & 펫 스킬 적용 (0) 2022.05.13 CCI - 06 - 펫 스킬 (쿨타임) (0) 2022.05.13