온라인 멀티플레이 게임과 가장 완벽한 상호작용
전에 미래의 눈높이와 현재의 목표에서 지금 참여하고 있는 프로젝트 이야기를 했는데요, 생각 난 김에 이번에는 개발을 하며 겪은 적이 있는 상호작용 개발 사례를 소개하겠습니다. 게임에서 상호작용을 개발하는 방법은 전에 인터랙션 오브젝트 설계 (1), 인터랙션 오브젝트 설계 (2), 인터랙션 오브젝트 설계 (3)을 통해 다룬 적이 있습니다. 이 때는 멀티플레이어 론라인 게임에 흔히 사용하는 단순한 형태의 상호작용 가능한 대상을 만들어 관리하는 방법을 설명했는데 아직 우리는 게임에 이런 대상을 집어 넣을 단계는 아닙니다.
오히려 싱글플레이 슈터 장르에 자주 등장하는 상호작용 가능한 대상에 더 가까운 특징을 가진 뭔가를 만들어야 했습니다. 단순한 요구사항은 복도에 문이 있는데 이 문은 문 옆에 있는 버튼을 눌러야 열립니다. 버튼에 가까이 다가가 상호작용 입력을 하면 플레이어가 버튼을 누르고 이에 따라 문이 열리는 겁니다. 만약 이 상황이 사람이 아주 많은 멀티플레이 환경에서 일어나야 했다면 이 상황 자체가 필요하지 않도록 플레이 시나리오를 바꿨을 겁니다. 플레이어가 아주 많은 환경에서 열리고 닫히는 문처럼 상태가 바뀌고 이 상태가 플레이에 직접적으로 영향을 미치는 대상을 함부로 사용하면 아주 많은 문제에 시달리게 됩니다. 그래서 이런 요소가 플레이에 핵심 요소가 아니라면 개발 비용을 줄이기 위해 웬만하면 피하곤 합니다. 하지만 싱글플레이와 유사한 환경이거나 이 상태 변화에 영향을 받는 사람 수가 적은 인스턴스 공간이라면 이런 상태 변화는 환경을 재미있게 만들어 주기 때문에 피할 이유가 적습니다.
이 상호작용 기능을 준비하면서 자주 겪은 상황은 이 기능과 요구사항을 들은 사람들이 상상하는 모습이 내가 상상한 모습과 상당히 다르다는 점이었습니다. 제 머릿속에서는 우리가 만드는 게임은 멀티플레이 온라인 게임이기 때문에 게임에서 일어나는 모든 상호작용을 상상할 때 아 상호작용이 일어나는 순간 그 주변에 항상 여러 다른 플레이어들이 서 있는 모습을 포함합니다. 그래서 이 상호작용이 일어날 때 상호작용을 직접 수행하는 플레이어 본인 뿐 아니라 주변의 다른 플레이어들에게 이 상황이 어떻게 보여야 하는지, 또 이 상황에 따른 상태 변화가 여러 플레이어들에게 어떻게 영향을 끼쳐야 하는지를 자연스럽게 생각하게 됩니다.
그런데 비슷한 상황을 주변에 서 있는 다른 플레이어들을 생략하고 이야기하면 종종 이런 상호작용 사례는 그들이 경험한 가장 훌륭한 싱글플레이 게임의 한 장면을 상상하는 것 같은 인상을 받았습니다. 위에서 소개한 버튼을 눌러 문을 여는 사례를 설명하면 내가 조작하는 플레이어가 문에 다가가 상호작용을 시작하면 아주 자연스럽게 문 손잡이를 잡고 이를 돌려 문을 열고 그 사이로 몸을 집어 넣어 문을 통과하는 상상을 합니다. 그러면서 요구사항에는 언급하지도 않은 문을 열 때 일어나는 온갖 상황에 대한 걱정을 늘어 놓기 시작하고요. 여기에는 가장 자연스럽게 문을 여는 상황이 멀티플레이 환경에서 일어날 때 우리가 겪게 될 온갖 어려움을 포함하기도 합니다.
이쯤 되면 우리들 모두가 경험 많은 게임 개발자들이라는 사실을 잠깐 뒤로 한 채 멀티플레이 환경에서 상호작용과 싱글플레이 환경에서 상호작용이 어떻게 다른지, 또 싱글플레이 환경에서 경험한 가장 완벽한 상호작용이 실은 기술적인 상호작용이 아니라 완벽하게 만들어진 컷씬일 경우가 많다는 점을 상기 시킬 수밖에 없습니다. 싱글플레이 환경에서 일어나는 가장 완벽한 상호작용 상당수는 이 상호작용 전체를 컷씬으로 만들기도 합니다. 문 여는 사례에서 이 동작이 게임플레이에 핵심적인 장치가 아니라면 그저 문을 열고 지나가기만 하면 되는데 여기에 기술적인 노력을 기울일 필요가 별로 없습니다.
플레이어가 문을 여는 도중에 몬스터들이 플레이어를 공격하지 않도록 잠깐 기다려 줄 필요도 없고 플레이어가 문 여는 모습을 주변에 다른 플레이어들에게 동기화하고 또 문이 닫히거나 열린 상태에 따라 주변 다른 플레이어들의 공격이 문을 통과할 지 가로 막힐 지 판정할 규칙을 만들 필요도 없으며 다른 문은 강한 공격으로 파괴되지만 상호작용이 일어나는 도중의 문은 갑자기 강철로 바뀌어 파괴되지 않는다는 예외를 만들 필요도 없습니다.
그런데 온라인 멀티플레이 환경에서는 방금 말한 이 모든 상황을 신경 써야만 합니다. 가령 문과 상호작용하는 플레이어가 아직 상호작용을 다 끝내지 않아 문이 완전히 열리지 않은 상태에서 누군가 반쯤 열린 문 사이로 총을 쏘면 어떻게 해야 할까요. 이 문제를 MMO 장르나 슈터 장르에서 해결하는 방법이 조금씩 다르지만 별로 고려하고 싶지 않은 상당히 골아픈 문제입니다. 여러 번 이야기했듯 이 동작이 게임의 핵심 플레이와 관련이 크지 않다면 우리들이 각자 생각하는 가장 완벽한 싱글플레이 게임의 상호작용보다 훨씬 못한 모습이라 하더라도 어느 정도 선에서 타협해야만 합니다. 그렇지 않으면 기껏해야 가장 완벽한 싱글플레이 환경의 상호작용을 만들어 남들과 비슷한 수준에 도달했을 뿐인데도 엄청난 비용을 소모하며 또 핵심 플레이와 관련이 적어 핵심 플레이의 변경에 따라 기능 전체를 들어내야 하는 상황에 쉽게 처하게 됩니다.
우리들이 각자 집에서 경험한 싱글플레이 환경의 가장 완벽한 상호작용과 회사에서 개발하는 그저 그런 멀티플레이 환경의 상호작용 사이에 괴리를 이해하지 않으면 한정된 개발 비용을 엉뚱한 곳에 낭비하는 결정을 할 수 있습니다. 우리가 경험한 가장 멋진 사례와 우리가 개발하는 사례 사이의 차이에 항상 주의하고 핵심 플레이와 관계가 깊은 것과 그렇지 않은 것을 상시 구분하고 헛갈리지 않도록 노력해야 합니다.