-> jump animation이 진행될 떄, 본래의 collider보다 높은 위치에 animation이 재생된다. 이 때문에 일정 높이의 점프를 하지 않으면 collider에 미리 부딪혀 fall로 넘어가지 못하고 그대로 멈춰버린다. 이 문제를 해결하기 위해서 키보드 키 누름 정도와는 상관없이 일정한 높이의 점프가 가능해야 한다고 생각했다.

_rigidbody.AddForce(Vector3.up * jumpPower, ForceMode.Impulse);
였다. addforce를 이용하면 일정한 속도가 아닌 힘이 벡터 방향을 따라 연속적으로 가해지므로 서서히 힘이 가해지는 구조였던 것이다. 그래서 다음과 같이 코드를 변경하였다.
_rigidbody.velocity = new Vector3 (_rigidbody.velocity.x, jumpHeight, _rigidbody.velocity.z);
https://docs.unity3d.com/Packages/com.unity.inputsystem@1.7/manual/Actions.html
https://docs.unity3d.com/Packages/com.unity.inputsystem@1.7/api/UnityEngine.InputSystem.InputAction.html#UnityEngine_InputSystem_InputAction_phase


animation 코드가 다음과 같다.
if(_playerController.isJumping && !_playerController.isAir) _animator.SetTrigger(PlayerAnimParameter.IsJump);
isAir와 isJumping은 다음과 같이 처리가 되었다.
private void InitializeInputSystem() {
_jumpAction.performed += context => isJumping = true;
_jumpAction.canceled += context => isJumping = false;
}
private void OnCollisionEnter(Collision collision)
{
if(collision.transform.CompareTag("Ground"))
isAir = false;
}
private void OnCollisionExit(Collision collision)
{
if(collision.transform.CompareTag("Ground"))
isAir = true;
}
jump를 추적하는 isJumping은 jump 키가 눌리면 true로, jump 키를 누르지 않으면 false로 돌아가게 하였고
isAir와 같은 경우에는 ground로 tag가 된 gameobject와 충돌을 하지 않을 때 true, 그렇지 않을 때 true가 되게 하였다.
_jumpAction.started += context => isJumping = true;
키 값이 계속해서 들어오지 않는 문제는 해결되었지만, 문제는 다른 곳에서 일어났다.
키를 계속 누르고 있으면 isJumping은 키를 뗄 때까지 true 상태가 되어있다.
animation이 전환되는 방식을 보면 isAir가 false일 때인데, 만약 점프를 성공한 후, player의 collider가
바닥과 닿게 되면 isAir의 값이 false로 변하고 isJumping은 여전이 true 값이기 때문에 land animation으로넘어가지 못하고 다시 jump animation으로 돌아왔다. (anistate에서 들어오므로)
이를 해결하기 위해서는 parameter값을 하나 더 만들어야 했다.

다음과 같이 jump가 잘 수행됨을 알 수가 있다.
