Rigidbody2D 컴포넌트의 velocity 속성(점프관련)
초기코드
private void Update()
{
// 매 프레임마다 지면에 있는지 확인
isGrounded = CheckIfGrounded();
}
private void FixedUpdate()
{
// 물리 업데이트에서 이동 적용
ApplyMovement(_movementDirection);
}
private void Jump()
{
// 지면에 있을 때만 점프 실행
if (isGrounded)
{
Debug.Log("Jumping");
_rigidbody.velocity = new Vector2(_rigidbody.velocity.x, jumpForce);
}
}
private void ApplyMovement(Vector2 direction)
{
// 이 코드는 원래 수직 속도(y)를 무시하고, direction.x만을 적용합니다.
_rigidbody.velocity = new Vector2(direction.x, 0);
}
}
velocity 속성은 물체의 속도를 나타내며, x (수평)와 y (수직) 두 방향 모두에 대한 값을 가진다.
Unity의 물리 엔진은 이 값을 사용하여 각 프레임마다 물체의 위치를 업데이트
중요한 부분은 velocity의 y 성분, 즉 수직 속도
점프는 y 방향의 속도를 증가시켜 캐릭터가 위로 움직이게 함으로써 구현
초기 코드에서는 ApplyMovement 메서드에서 Rigidbody2D의 velocity를 설정할 때 수평 방향만 고려, 수직 속도는 무시
즉, 점프를 하고자 할 때 수직 속도를 설정해도, 이동 로직이 실행될 때마다 이 수직 속도가 무시되고 다시 0으로 설정
해결책은 ApplyMovement 메서드 내에서 Rigidbody2D의 현재 velocity.y 값을 유지하는 것
해결코드
private void ApplyMovement(Vector2 direction)
{
// 이 코드는 현재 수직 속도(y)를 유지합니다.
_rigidbody.velocity = new Vector2(direction.x, _rigidbody.velocity.y);
}
'TIL' 카테고리의 다른 글
01.04 (TIL-Unity) (0) | 2024.01.04 |
---|---|
01.03 (TIL-Unity) (2) | 2024.01.03 |
12.29 (TIL-Unity3D) (0) | 2024.01.02 |
12.28 (TIL-Unity3D) (1) | 2023.12.28 |
12.27 (TIL-Unity3D) (0) | 2023.12.27 |