캐릭터가 낭떠러지에서 한 박자 늦게 떨어져도 되는 까닭

여러가지 종류의 게임을 하다 보면 분명히 발판 끝에서 늦게 점프 버튼을 눌렀는데도 불구하고 캐릭터가 떨어지지 않고 점프에 성공하는 순간이 있는데요.

늦게 눌렀다고 생각하기 쉽지만 사실 이건 버그가 아닌 코요테 타임이라는 의도된 설계입니다. 이번 포스팅에서는 왜 코요테 타임이 필요한지, 어떤 차이를 만드는지 코딩으로 확인해보겠습니다.

1. 코요테 타임이란?

코요테 타임이란 캐릭터가 발판 끝을 떠난 후에도 아주 짧은 시간 동안은 여전히 발판에 접지된 상태인 것처럼 점프 입력을 허용해주는 설계입니다.

이름은 루니 툰 만화 ‘로드러너’에 나오는 와일 E. 코요테가 절벽 밖으로 점프하고도 한동안 허공에 떠 있다가 뒤늦게 떨어지는 장면에서 따왔는데요. 게임 개발 용어 사전인 GDQuest는 이 기법을 “플레이어가 플랫폼에서 걸어 나간 뒤에도 짧은 시간 동안은 점프를 허용하는 게임 설계”라고 정의하며, 대개 0.1초에서 0.2초 사이의 유예 시간을 권장하고 있다고 설명하고 있습니다.

2. 이런 예외 처리가 필요한 이유

이유는 아주 간단합니다. 사람은 픽셀 단위로 발판의 끝을 정확히 인지하고 있고 그 순간에 맞춰 버튼을 누르는 것이 불가능합니다.

화면을 보고 뇌에서 지금 눌러야 한다고 판단하고 손가락이 실제로 반응하기까지는 물리적으로 아주 시간이 오래 걸립니다. 코요테 타임이 없는 게임에서는 캐릭터가 발판을 벗어나는 정확한 프레임에 점프 입력을 해야만 점프가 가능하게 되는데 이 조건은 사람의 반응 속도로는 안정적으로 맞추는 것이 아주 어렵습니다.

‘셀레스트’와 ‘타워폴’을 만든 개발자 매디 소슨(Maddy Thorson)은 자신의 X(구 트위터) 스레드에서 게임 필감을 위하여 여러 도구와 장치를 소개하며 코요테 타임을 “발판을 떠난 뒤에도 짧은 시간 동안은 여전히 점프할 수 있는 것”이라고 언급한 사실이 있습니다. 유명 인디 게임 개발자가 실제로 자기 게임에 적용한 설계라는 부분에서 이 설계가 단순히 이론이 아니라 실전에서 검증된 접근이라는 것을 확인할 수 있습니다.

3. 직접 구현해보기

머리로는 이해가 가더라도 실제로 얼마나 차이가 나는지는 숫자로 봐야 체감이 확실히 되는데요. 그렇기 때문에 파이썬을 이용해서 실제 게임 엔진에서 흔히 쓰는 방식 그대로 코요테 타임을 구현 해보았습니다. 캐릭터가 발판을 떠나는 순간 타이머를 코요테 윈도우 값으로 설정하고 매 프레임(60fps 기준 약 16.7ms)마다 이 타이머를 감소시키다가 타이머가 0보다 크면 아직 발판에 접지 중인 것처럼 취급해서 점프 입력을 허용하는 구조입니다.

이번 포스팅에서 언급하는 이 구현을 검증하기 위해서 캐릭터가 발판 끝을 떠난 시점부터 플레이어가 실제로 점프 버튼을 누르는 시점까지의 지연을 0-250ms 사이에서 균등하게 분포한다고 가정하고(이건 실측 반응 시간 데이터가 아니라 코요테 타임의 효과 범위를 눈으로 보여주기 위해 이 글에서 설정한 모델링 가정임을 명백히 밝혀둡니다.) 코요테 타임 윈도우를 0ms부터 250ms까지 변경해가며 각각 20만 번씩 점프 시도를 시뮬레이션해서 성공률을 체크해봤습니다.

결과는 아주 확실했는데요. 코요테 타임이 0ms(즉, 기능이 아예 없는 상황)일 때는 점프 성공 확률이 정확히 0%였습니다. 반대로, 윈도우를 GDQuest가 권장하는 100ms로 세팅하자 성공 확률이 40%로 올라왔고 200ms에서는 80%까지 올라왔습니다. 이 관계는 지연 시간이 균등 분포라는 가정 때문에 정확히 선형으로 보였는데 사람의 반응 지연은 균등 분포보다는 특정 값 주변에 몰리는 분포에 가까울 가능성이 매우 높으므로 실제 성공 확률 곡선은 다음의 사진처럼 이번 실험보다 더 가파르게 꺾일 수가 있습니다.

코요테 타임 길이에 따른 점프 성공률을 확인할 수 있는 실측 꺾은선 그래프

4. 코요테 타임이 없다면?

이 실험에서 가장 기억에 남는 부분은 코요테 타임이 0ms일 때 성공률이 정확히 0%로 나왔다는 것입니다. 이는 극단적인 가정(지연이 정확히 0인 경우만 성공 가능) 때문에 나온 수치이기는 하나 실제로 코요테 타임이 존재하지 않는 게임에서 플레이어들이 “분명 발판 위에서 점프 버튼을 눌렀는데 절벽에서 떨어졌습니다.”라고 느끼는 억울함이 왜 생기는 것인지 이에 대한 이유를 그대로 나타냅니다.

실제 사람의 반응 속도로는 프레임 단위의 정확한 타이밍을 완벽하게 맞추기 어렵기 때문에 코요테 타임이 없으면 플레이어의 실력과 무관하게 억울한 실패가 계속해서 쌓이게 됩니다.

5. 이번 실험에서 아쉬웠던 부분

이번 글에서 진행한 실험은 플레이어의 반응 지연은 0~250ms 균등 분포로 단순하게 진행했다는 한계가 있습니다. 실제로는 플레이어의 게임에 대한 숙련도와 익숙함 그리고 그날의 컨디션에 따라서 지연 분포 자체가 크게 달라질 수 있습니다.

또한 코요테 타임을 너무 길게 설정하게 되면 오히려 “이 게임은 조작감이 흐물흐물하고 너무 쉽다.”라는 부정적 평가가 나올 수 있기 때문에 GDQuest에서 제시하는 0.1~0.2초 구간을 넘어 과하게 세팅하는 것이 매번 정답이라고 말할 수는 없습니다. 더불어 실제 게임상에서는 점프 버튼을 미리 누르고 착지 순간 자동으로 점프가 나가게 되는 입력 버퍼링을 함께 적용시켜서 양쪽 방향의 타이밍 오차를 모두 흡수하는 경우가 많다고 합니다.

6. 마무리

코요테 타임은 사운드나 그래픽처럼 눈에 띄는 요소라고는 말할 수 없지만 게임 플레이어가 게임을 “억울하다”고 느끼지 않게 만드는 데에 아주 중요한 역할을 소화해냅니다.

이번의 실험에서 직접 확인하였듯이 단 100~200ms의 유예 시간만으로도 점프 성공률은 극적으로 달라지게 됩니다. 작은 규모의 플랫포머 게임을 만드는 분이라면 화려한 그래픽이나 이펙트보다도 이 몇십 밀리초짜리 타이머 하나를 먼저 넣어 완성도를 높이는 것이 게임 플레이어의 만족도를 크게 높일 수 있다는 것을 이번 실험을 통해 다시 확인할 수 있었습니다.

댓글 남기기