본문 바로가기
유니티 공부/Unity

Unity - 타격감 있는 넉백 구현하기: X축과 Y축 힘을 나눠야 하는 이유

by 코딩하는 돼징 2025. 7. 10.
반응형

게임에서 적이나 장애물을 만날때 플레이어를 튕겨나가게 하는 넉백 연출을 보통 많이 한다. 여기에서 잘 맞았다고 느껴질려면 x,y축이 같이 적절히 움직여야한다.

 

문제 상황

x,y 축을 같이 사용하는 경우 힘이 섞였다.

 

direction.normalized는 벡터 크기를 1로 만들기 때문에 bounceForce 하나를 키우면 X축과 Y축 힘이 자동으로 비율에 따라 나뉜다. 즉 X를 강하게 하면 Y는 약해지고 Y를 높이면 X가 줄어든다.

 

rb.AddForce(direction.normalized * bounceForce, ForceMode2D.Impulse);

그 결과

튕겨나가는 각도가 원하는 방향과 다르게 왜곡되고 가끔은 캐릭터가 거의 안 뜨거나, X축으로만 밀리는 이상한 움직임 발생하였다.

 

원인 분석

X,Y 힘이 하나의 벡터에 묶여 있어서 서로 영향을 주므로 각 축의 힘을 독립적으로 제어해야한다.

 

 

해결 방법

x축과 y축 힘을 가하는것을 나누자

이렇가 하는 경우 x방향으로 먼저 밀리고 약간의 시간 후 y축으로 떠오르면서 자연스럽게 뒤로 튕기는 느낌을 만들 수 있다.

// X축 넉백 먼저
Vector2 knockbackX = new Vector2(direction.x * bounceForceX, 0f);
rb.AddForce(knockbackX, ForceMode2D.Impulse);

// 약간 딜레이 후 Y축 넉백
StartCoroutine(ApplyYKnockback(rb));

private IEnumerator ApplyYKnockback(Rigidbody2D rb)
{
    yield return new WaitForSeconds(0.05f);
    rb.AddForce(new Vector2(0f, bounceForceY), ForceMode2D.Impulse);
}

 

반응형

댓글