Unity 개발일지/[Unity2D]졸업프로젝트
[Unity2D] 14. 낙뎀(낙하 데미지) 추가(+버그 수정)
knhoo
2024. 2. 5. 01:08
728x90
2024.01.05 낙하 데미지 추가
이번에는 플레이어가 일정 높이 이상에서
떨어질 때 체력이 감소하는
낙하 데미지를 추가해 주었다.
기존의 Player 스크립트에 추가했다.
Player
float maxPosition = 0; //최고 높이
//...
if (!anim.GetBool("isJumping")) //점프중이 아니고
{
//(최고 높이 - 현지 높이) > 5이면 낙뎀
if (maxPosition - transform.position.y > 5)
{
life--;
}
if (life <= 0)
{
manager.GameOver();
}
//최고높이 초기화
maxPosition = 0;
}
else
{
//낙하중이고 && 최고높이가 현재 높이보다 낮으면
if (rigid.velocity.y < 0 && maxPosition < transform.position.y)
{
//최고 높이를 현재 높이로 업데이트
maxPosition = transform.position.y;
}
}
낙하할 때 낙하 시작지점을
maxposition으로 설정해주고,
현재 플레이어의 y좌표와의 차이를 구하여
일정 수준 이상 차이가 나면 데미지를 받도록 하였다.
버그
위와 같이 구현해 주었을 때 한가지 문제점을 발견했다.
플레이어가 아래로 내려가다가
y값 좌표 transform.position.y가 음수가 되면
maxpositon이 transform.position.y보다 항상 크기 때문에
maxpositon은 양수인 채로 고정이 되고,
maxpositon - transform.position.y는
(양수 - 음수 = 양수)이므로 항상 양수인 채로 점점 증가하게 되어
플레이어가 일정 위치 아래로 내려가게 되면
갑자기 죽는 버그가 발생했다.
개선
위의 문제를 해결하기 위해 다음과 같이 코드를 수정해주었다.
if (!anim.GetBool("isJumping"))
{
if (maxPosition - transform.position.y > 5)
{
life--;
if (life <= 0)
{
manager.GameOver();
}
}
//추가된 부분!!
maxPosition = -999;
} else
{
if (rigid.velocity.y < 0 && maxPosition < transform.position.y)
{
maxPosition = transform.position.y;
}
}
maxpositon 의 초기화값을 -999로 설정해주어
플레이어의 y좌표가 음수가 되더라도
maxpositon < transform.position.y이므로
maxpositon도 음수로 제대로 설정이 된다.
728x90