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