사다리를 잡으면 캐릭터 방향이 자동으로 맞춰지는 이유

사다리 오르내리기 기능을 처음 게임에 넣었을 때 캐릭터가 사다리를 잡는 순간 몸이 이상한 방향으로 틀어져 있는 장면을 자주 목격했는데요.

플레이어가 사다리 정면이 아닌 살짝 비스듬한 각도로 다가가서 상호작용 버튼을 클릭했을 뿐인데 그 상태 그대로 등반 모드로 들어가버린 탓이었습니다. 손은 허공에 떠 있고 몸은 사다리를 반쯤 등지고 있는 누가 보더라도 이상한 자세였습니다. 아래에서 이것의 원인과 해결 방법을 함께 다뤄보도록 하겠습니다.

손이 봉을 놓치는 순간

문제의 원인은 필자의 생각보다 아주 단순했습니다. 캐릭터가 사다리 상호작용 범위 안에만 들어오면 그 방향과 위치를 그대로 유지한 채 등반 애니메이션만 틀어주는 구조였기 때문이었는데요.

상호작용 범위는 대체로 사다리 앞쪽으로 반경 수십 센티미터 정도의 원형이나 반원형으로 잡혀 있었는데 그 안 어디에서 버튼을 누르든 위치와 각도는 제각각이었습니다. 정면으로 딱 붙어서 누르면 아주 자연스러웠지만 살짝 옆에서 비스듬히 다가가 눌렀다면 손과 발이 봉 위치와 어긋난 채로 등반이 시작되었습니다.

정답은 이미 있었다

이 문제는 유니티로 사다리 시스템을 만들어본 개발자들의 글에 이미 해법이 적혀있었는데요. 개발자 로드 카카벨은 자신의 사다리 구현기에서 플레이어가 사다리에 붙는 순간 캐릭터 컨트롤러를 잠깐 꺼버린 후 “플레이어가 올바른 방향을 보게 만들고 미리 정해둔 스냅 포인트로 위치를 옮긴다”고 밝혀놓았습니다.

컨트롤러를 꺼두는 이유에 대해서는 “그렇게 하지 않으면 이상한 움직임이 생긴다”고 직접 밝히기도 하였습니다.

또 다른 개발자 미카 데이비스도 사다리 구현 글에서 비슷한 접근을 이야기하는데 사다리 밑동에 미리 배치해둔 빈 오브젝트를 기준점 삼아 “그 지점으로 플레이어를 이동시킨다”는 방식을 씁니다. 두 글 모두 방식은 조금씩 다르지만 핵심은 같다고 말할 수 있습니다. 캐릭터가 그 순간 어디서 어떤 각도로 서 있었는지는 무시하고 사다리 기준으로 미리 정해둔 위치와 방향으로 강제로 맞춰버린다는 것이었습니다.

숫자로 뜯어보니

이 스냅 처리가 없으면 실제로 얼마나 어긋나는지 궁금해서 파이썬으로 20만 번을 시뮬레이션 해봤습니다. 캐릭터가 사다리 앞 반경 0.6m 상호작용 범위 아무 지점에서나 다가온다고 가정을 하고 그 순간 캐릭터가 사다리 정면 대비 최대 플러스 마이너스 60도까지 다른 방향을 보고 있을 수 있다고 뒀습니다. 결과는 평균 방향 오차가 30도, 최대는 60도까지 나왔습니다. 15도만 어긋나더라도 눈에 띄게 이상해 보인다고 기준을 잡아보면 전체 시행의 75.1%가 이 기준을 넘어섰습니다. 위치 오차도 평균 30cm, 최대 60cm까지 벌어졌죠. 반대로 스냅처리를 그대로 적용한 경우에는 두 값 다 예외 없이 정확히 0이었습니다.

스냅 없이 사다리를 잡을 때 방향 오차의 분포를 보여주는 히스토그램으로 스냅 적용 시 0도에 수렴함

이 모델도 완벽하지는 않다

다만 이번 계산은 캐릭터가 다가오는 각도가 플러스 마이너스 60도 범위 안에서 고르게 분포한다고 아주 단순하게 가정을 한 결과라고 할 수 있습니다. 실제로는 플레이어가 애초에 사다리를 어느 정도는 마주 보고 걸어오는 경우가 압도적으로 많기 때문에 극단적으로 90도 가까이 틀어진 각도로 접근하는 일은 이 계산보다는 드물 수도 있습니다.

반대로 사다리가 좁은 통로나 구석에 있어서 접근 각도 자체가 제한적인 게임 맵도 있으니 이 오차 분포는 상황마다 달라질 수 있는 하나의 참고 값 정도로 보는 것이 맞습니다.

더불어 이 계산은 순간적인 위치와 각도 차이만 다뤘을 뿐이지 실제 게임에서 스냅이 일어나는 그 짧은 시간 동안 캐릭터가 부드럽게 보간되며 이동하는지 순간 이동하듯 뚝 끊기는지는 별개의 문제입니다. 로드 카카벨의 게시물에서도 컨트롤러를 끄고 다시 켜는 과정에서 “이상한 움직임”이 생길 수 있다고 경고한 것을 생각해 보면 스냅 자체는 위치와 각도 오차를 없애주지만 그 전환을 매끄럽게 처리하는 것은 또 다른 과제로 남는다는 뜻이었습니다.

대가가 있었다

캐릭터가 사다리를 잡을 때마다 딱 정면으로 자세를 잡는 것은 물리적으로 그렇게 서 있어서가 아닌 원래 있던 위치와 각도를 지우고 미리 정해둔 자리로 강제로 옮겨 놓는 결과였습니다.

이번 시뮬레이션 결과에서 나온 75.1%라는 숫자는 스냅 처리가 빠지면 열에 일곱 번 이상은 눈에 띄게 어색한 자세로 등반이 시작된다는 말이기도 합니다. 하지만 그 어긋남을 삭제하는 대신 전환 순간을 얼마나 자연스럽게 보이게 할지는 또 다른 숙제로 남는다고 할 수 있습니다.

댓글 남기기