현실에서는 문고리를 잡고 돌린 다음 문을 밀면서 같이 걸어 들어갑니다. 게임 캐릭터에게 이걸 그대로 시키면 맞춰야 할 것이 너무 많아서, 게임은 문을 다르게 엽니다.
게임은 캐릭터를 정해진 자리로 끌어다 세워 미리 만든 동작을 틀거나, 걷는 동작 위에 팔 동작만 겹치거나, 문이 혼자 열리게 하거나, 문을 물리 오브젝트로 두고 몸으로 밀게 합니다. 네 방법을 언리얼 엔진 5.8 에서 하나씩 직접 짜 봤습니다.
영상판 — 언리얼 엔진 5.8 에 격자 바닥과 문간 뚫린 벽을 세우고, 엔진 기본 마네킹으로 찍었습니다.
현실처럼 열려면 맞출 게 많습니다
바이오웨어 오스틴 출신 디자이너 Damion Schubert 는 2021년 3월 9일 게임 속 문을 두고 쓴 스레드에서, 문을 여는 일 자체가 어색하다고 했습니다.
"Either a player reaches out and puts their hand on the doorknob - which feels slow and requires lining up animations - or doors fly open magically automatically, which breaks the immersion you're probably hoping to attain." 플레이어가 손을 뻗어 문고리에 손을 얹거나(느리게 느껴지고 애니메이션을 맞춰야 한다), 문이 마법처럼 저절로 활짝 열리거나(아마 노렸을 몰입이 깨진다) 둘 중 하나다.
크리스털 다이내믹스의 게임 디렉터 Will Kerslake 는 The Verge 에 보낸 메시지에서, 공들인 3인칭 게임이라면 플레이어의 손이 손잡이로 가리라고 기대하게 된다고 했습니다.
문 앞에 서서 손잡이를 쥐고 여는 동작을 직접 짜 보니, 맞출 것이 셋이었습니다(그림 1). 손이 손잡이에 닿는 자리에 몸이 서야 하고, 손은 IK 로 손잡이에 붙인 채 눌러 돌려야 하며, 문이 도는 동안 몸은 문틀을 뚫지 않는 길로 따라 걸어야 합니다. 셋을 맞춘 뒤에도, 문이 45° 쯤 열린 데서 손을 떼고 팔을 걷는 자세로 되돌리는 일이 남습니다.

정해진 자리로 끌어다 세우고 동작을 틉니다
첫째 방법은 캐릭터를 문 앞 정해진 자리로 끌어다 세운 뒤 미리 만든 동작을 트는 것입니다. 엔진에도 이렇게 맞추는 기능이 있습니다. 언리얼 엔진 문서는 Motion Warping 을 캐릭터의 루트 모션을 목표에 맞게 바꾸는 기능으로 소개하고, 유니티의 Animator.MatchTarget 은 동작이 정해진 시점에 이를 때 몸의 한 부위가 목표 위치에 닿도록 게임 오브젝트의 위치와 회전을 맞춥니다.
우리 판은 이런 기능 없이, 큰 양문 앞에서 캐릭터를 문간 가운데 앞 자리로 0.35초에 끌어다 세운 뒤 두 손으로 미는 동작을 틉니다(그림 2). 문짝은 각자 가까운 손이 민 만큼 열립니다. 캐릭터는 문이 30° 쯤 열렸을 때 손을 떼고, 걷는 동작으로 블렌드해 걸어 들어갑니다. 영상의 조작 띠는 화면에 얹은 그림이고, 우리 판의 캐릭터는 처음부터 짜 놓은 길로 움직입니다.
라스트 오브 어스 파트 2(이하 라오어 2)에서 문이 제대로 작동하게 만드는 기술 쪽 일을 맡았던 Bryan Singh 은 Vox 영상에서, 플레이어에게서 조작을 빼앗으면 이상하고 나쁘게 느껴지고, 문에서 최악이면 버튼을 누르고 사실상 컷신을 보는 셈이 된다고 했습니다. 영상은 여는 도중에 빠져나올 수 있게 하려면 캐릭터 애니메이션을 잘게 쪼개야 한다고 덧붙입니다. 라오어 2 공동 게임 디렉터 Kurt Margenau 도 열면 컷신이 나오는 문이 있다고 했습니다.

걷는 동작 위에 팔 동작만 겹칩니다
둘째 방법은 걸음은 그대로 두고 팔 동작만 겹치는(레이어링) 것입니다. Margenau 는 Schubert 와 같은 날 쓴 스레드에서, 라오어 2 는 애니메이션을 공들이는 게임이라 문이 마법처럼 열릴 수는 없고 캐릭터가 문고리로 손을 뻗어 밀어 열어야 한다고 했습니다. 이 게임에서 문을 여는 일은 플레이어를 거의 늦추지 않고 조작도 빼앗지 않는다고 했고, 애니메이션의 충실도와 반응성 사이의 균형을 맞추려고 문고리로 손을 일부만 뻗는 동작을 겹치는 시스템이 들어갔다고 썼습니다. 그 시스템이 어떻게 짜였는지는 스레드에 없습니다.
우리 판은 그 생각을 팔 IK 로 흉내 냈습니다(그림 3). 캐릭터는 걷는 동작과 빠르기를 그대로 둔 채 왼팔에만 IK 를 겹쳐 손잡이를 짚습니다. 짚은 뒤에는 손잡이가 늘 몸보다 조금 앞에 있도록, 몸이 나아가는 만큼 문이 열립니다.

문이 혼자, 내 반대쪽으로 열립니다
셋째 방법은 버튼 하나로 문이 혼자 열리게 하는 것입니다. Source 엔진의 경첩으로 도는 문(prop_door_rotating)은 양쪽으로 열릴 수 있으면 여는 사람의 반대쪽으로 열리고, 연 사람이 플레이어인데 반대쪽이 막혀 있으면 플레이어 쪽으로 열립니다(Source SDK 2013 코드). 라오어 2 의 문은 손으로 밀어 열지만, Margenau 는 그 문도 늘 플레이어 반대쪽으로 열린다고 했습니다. 그게 빠르고 플레이어를 막지 않아서이고, 그래서 어느 쪽으로 돌아도 이어져 보이게 문 모델마다 양방향 경첩을 달았다고 했습니다.
우리 판은 버튼 대신, 여는 사람이 문 가까이 오면 그 반대쪽으로 90° 까지 열리게 했습니다(그림 4). 캐릭터는 걸음을 늦추지 않고 지나갑니다.

문을 경첩에 묶인 물리 오브젝트로 둡니다
넷째는 손잡이도 동작도 없이 문을 물리로 미는 것입니다. Margenau 는 라오어 2 의 문이 물리 기반이라 달려서 세게 밀고 지나가면 뒤에서 쾅 닫히고, 플레이어가 밀 수도 있고 플레이어를 밀 수도 있는 물리 오브젝트를 엔진에 새로 만들어야 했다고 썼습니다.
우리는 문짝 크기의 보이지 않는 35 kg 짜리 상자를 경첩 하나에 묶어 양쪽으로 돌게 하고, 보이는 문짝은 그 상자를 따라 움직이게 했습니다. 몸은 매 프레임 골반에서 걷는 쪽으로 28 cm 앞당긴 자리에 옮겨 놓는 보이지 않는 캡슐(반지름 38 cm)입니다(그림 5). 몸이 닿자 문은 0.6초 만에 경첩 한계 105° 까지 밀려 열렸습니다. 우리 판은 몸이 문을 밀기만 하고, 문이 캐릭터를 밀지는 않습니다.

여러 방법을 섞거나, 문을 아예 두지 않습니다
라오어 2 는 위에서 본 손 뻗기와 반대쪽 열기, 물리 문을 한 게임 안에서 함께 썼고, 열면 컷신이 나오는 문도 따로 있었습니다. 적과 마주친 긴장 상태에서는 문이 천천히 저절로 닫히게 해, 적 AI 를 더 잘 막게 했다고도 했습니다.
문을 두지 않는 쪽도 많습니다. Kerslake 는 놀랄 만큼 많은 게임이 다룰 수 있는 문을 아예 두지 않는다고 했고, 그보다 한 단계 복잡한 것이 한 번 열리면 다시 닫히지 않는, 진행을 막는 문이라고 했습니다. Schubert 도 같은 날 답글에서 문이 없는 게임이 아주 많고 플레이어는 알아채지도 못한다고 했습니다.
참고 자료
- Damion Schubert, 게임 속 문 스레드(X, 2021-03-09). 손을 뻗거나 저절로 열리거나 https://x.com/ZenOfDesign/status/1369336758211608583 · 같은 날 답글 — 문이 없어도 알아채지 못한다 https://x.com/ZenOfDesign/status/1369192932889292803
- Kurt Margenau, 라오어 2 의 문 스레드(X, 2021-03-09). 손을 일부만 뻗는 동작 겹치기 · 조작을 빼앗지 않음 · 물리 문 · 전투 중 저절로 닫힘 https://x.com/kurtmargenau/status/1369342602177220609 · 늘 반대쪽으로 열림 https://x.com/kurtmargenau/status/1369370886982279171 · 열면 컷신이 나오는 문 https://x.com/kurtmargenau/status/1369387327399882764
- Vox, Why video game doors are so hard to get right(2021). Bryan Singh — 조작을 빼앗으면 · 컷신 · 잘게 쪼갠 애니메이션 https://www.youtube.com/watch?v=AYEWsLdLmcc
- The Verge, Why game developers can’t get a handle on doors(2021-03-12). Will Kerslake — 손이 손잡이로 가리라는 기대 · 문을 아예 안 둔 게임 https://www.theverge.com/22328169/game-development-doors-design-difficult
- Valve, Source SDK 2013 props.cpp(CPropDoorRotating::BeginOpening). 여는 사람 반대쪽 · 막히면 플레이어 쪽 https://github.com/ValveSoftware/source-sdk-2013/blob/master/src/game/server/props.cpp
- Epic Games, Motion Warping in Unreal Engine(언리얼 엔진 문서). https://dev.epicgames.com/documentation/unreal-engine/motion-warping-in-unreal-engine?lang=en-US
- Unity, Animator.MatchTarget(유니티 스크립트 문서). https://docs.unity3d.com/6000.6/Documentation/ScriptReference/Animator.MatchTarget.html
- 문 에셋: Modular Military Operation Urban Training Environment · Arabian Pack(CGHERO, Fab) · 캐릭터: 언리얼 엔진 기본 마네킹(Epic Games) · 미는 동작: Mixamo(Adobe)
'게임개발뜯어보기' 카테고리의 다른 글
| 벽에서 먼저 나온 쪽이 유리한 이유 - 피커스 어드밴티지 (0) | 2026.10.29 |
|---|---|
| 이 인벤토리는 칸을 보이는 만큼만 만든다 - 리스트 가상화 (0) | 2026.10.28 |
| 이 연막은 그림이 아니라 공간을 채운 복셀이다 - 복셀과 레이 마칭 (0) | 2026.10.26 |
| 게임 속 계단현상, 이렇게 지워왔다 - 슈퍼샘플링부터 DLSS까지 (1) | 2026.10.24 |
| 게임 속 바람은 공기가 아니라 낙엽이 읽는 값이다 - 윈드 존과 바람 그림자 (0) | 2026.10.23 |