[Unity3D] 점프 유예 시간

oy Hong·2024년 5월 1일

아이디어


점프 후 착지한 후 곧바로 점프하려고 할 때 의도와는 다르게 입력이 씹히거나, 높은 곳에서 아래로 점프할 때 생각했던 타이밍에 점프가 되지 않아 불쾌한 조작 경험을 줄 수 있는 환경을 해결하기 위해 점프를 하는데에 유예 시간을 적용하여 좀 더 부드럽고, 불합리하다고 느끼지 않도록 개선해보도록 하겠다.

스크립트 수정

점프 구현 스크립트를 수정한다.

/* 
 * 변수 추가
 */

// 점프버튼 유예 시간
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이다.

0개의 댓글