점프 후 착지한 후 곧바로 점프하려고 할 때 의도와는 다르게 입력이 씹히거나, 높은 곳에서 아래로 점프할 때 생각했던 타이밍에 점프가 되지 않아 불쾌한 조작 경험을 줄 수 있는 환경을 해결하기 위해 점프를 하는데에 유예 시간을 적용하여 좀 더 부드럽고, 불합리하다고 느끼지 않도록 개선해보도록 하겠다.
점프 구현 스크립트를 수정한다.
/*
* 변수 추가
*/
// 점프버튼 유예 시간
public float jumpButtonGracePeriod = 0.2f;
// 마지막 땅 접지 시간
private float? lastGroundedTime;
// 점프 버튼을 누른 시간
private float? jumpButtonPressedTime;
/*
* 업데이트 메서드 수정
*/
void Update()
{
//...중략
if (characterController.isGrounded)
{
lastGroundedTime = Time.time;
}
if (Input.GetButtonDown("Jump"))
{
jumpButtonPressedTime = Time.time;
}
if (Time.time - lastGroundedTime <= jumpButtonGracePeriod)
{
characterController.stepOffset = originalStepOffset;
ySpeed = -0.8f;
if (Time.time - jumpButtonPressedTime <= jumpButtonGracePeriod)
{
ySpeed = jumpSpeed;
lastGroundedTime = null;
jumpButtonPressedTime = null;
}
}
else
{
characterController.stepOffset = 0;
}
//...중략
}
버튼을 누른 시점 땅에 접지 한 시점 을 저장하여, 유예 시간 전에 버튼이 눌렸다면 점프를 실행할 수 있도록 스크립트를 수정했다.
Time.time -
Null 허용 값 형식의 연산 결과는 Null이다.