반응형
게임에서 적이나 장애물을 만날때 플레이어를 튕겨나가게 하는 넉백 연출을 보통 많이 한다. 여기에서 잘 맞았다고 느껴질려면 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);
}
반응형
'유니티 공부 > Unity' 카테고리의 다른 글
Unity - Dialogue System for Unity + I2 Localization 연동 가이드 (3) | 2025.07.23 |
---|---|
Unity - Utility(유틸리티)란? (0) | 2025.07.16 |
Unity - 가비지 컬렉터(Garbage Collector,GC) (1) | 2025.07.09 |
Unity - Behavior Designer 무한 루프 문제 해결 방법 (0) | 2025.07.08 |
Unity - 행동트리(Behavior Tree) +) Behavior designer 에셋 (1) | 2025.07.07 |
댓글