아이템 상세정보를 여러 상황에 공유하게 해 주세요
히트2를 플레이하다가 기시감이 드는 아이템 상세정보 인터페이스를 봤습니다. 게임 상의 여러 요소는 아이템 모양으로 정규화 되어 있습니다. 재화, 성장재료, 장비 등인데요, 맥락 상 이런 각기 다른 여러 요소들을 아이템 모양으로 표현하는 것은 무척 자연스러운 일입니다. 아이템 모양으로 표현하면 이미 구축해 놓은 아이템 시스템의 여러 기능을 활용할 수 있습니다. 인벤토리 인터페이스를 통해 같은 카테고리 아이템만 조회하거나 같은 아이템 여러 개를 가지고 있을 때 이를 쉽게 표현할 수 있고 아이템을 장착하고 사용하며 거래하거나 파괴하는 표준 작업을 편하게 개발할 수 있습니다.
한편 서로 다른 여러 가지 요소를 아이템 모양으로 만들면서 부작용이 생기기도 합니다. 아이템 모양으로 만들면 인벤토리 뿐 아니라 아이템 상세정보 같은 주요 인터페이스 역시 공용으로 사용하게 됩니다. 게임 내 구성요소에 따라 아이템 모양으로 표현하는데까지는 자연스럽지만 주요 인터페이스를 공유하는데서부터는 자연스럽지 않기도 합니다. 가령 장비는 인벤토리에 아이템 모양으로 표현되지만 다른 아이템에는 없는 성장 시스템이 있습니다. 독립적으로 성장재료를 소모해 레벨이 올라가며 게임에 따라서는 또 다른 아이템인 보석을 장착하기도 합니다. 여느 아이템은 획득처 정보를 제공하지만 아이템 모양으로 표시되는 재화는 획득처를 자동화해 표시하기에는 너무 광범위한 곳에서 얻을 수 있습니다.
비슷한 장르 게임을 개발할 때 아이템 상세정보 인터페이스 한 벌을 만들어 아이템 모양으로 표현되는 모든 요소에 공유하라는 요구를 받은 적이 있습니다. 요구를 낸 쪽에서는 이렇게 하면 비용을 절약할 수 있으리라 생각한 것 같았습니다. 실제로는 아이템 모양으로 표시되는 여러 요소가 아이템 시스템을 통해 표현되고 처리되려면 아이템이 공유하는 약속을 지켜야 하고 이미 이 단계에서 비용이 올라갑니다.
골드를 인벤토리에 아이템 모양으로 표시해 봅시다. 재화인 골드가 인벤토리에 나타나는 순간 인벤토리에서 일어나는 여러 조작에 대비해야 합니다. 쌓여 있는 골드를 여러 조각으로 나눌 수 있어야 합니다. 인벤토리에서 골드를 집어 장착 슬롯에 넣으려고 할 수 있습니다. 이런 조작을 방지하기 위해 장비장착 인터페이스를 열면 골드가 표시되지 않는 별도 필터가 필요할 겁니다. 골드를 거래소에 올리려고 할 수 있습니다. 장비장착과 비슷한 대응을 해야 합니다. 골드를 성장시키려 하거나 파괴하려 할 수도 있습니다. 각 상황에 대비해야 합니다. 골드는 상대적으로 단순하지만 비슷한 발상에 따라 다이아가 인벤토리에 나타난다면 새로운 세계가 열립니다. 다이아는 내부적으로 한 가지 재화가 아닐 수 있습니다. 유료 다이아와 무료 다이아로 구분하기도 하는데 만약 인게임에서 이들을 구분해서 표시하지 않는다면 아이템 시스템을 사용하려 할 때 별도로 처리해야만 합니다.
아이템은 아이템 상세정보 인터페이스를 통해 표현되는데 아이템 상세정보 인터페이스는 근본적으로 아이템 인스턴스를 위한 것입니다. 아이템 인스턴스는 게임 상에 아이템이 나타날 때 생성된 정보입니다. 몬스터로부터 아이템이 드랍될 때 원본으로부터 정보를 복사해 아이템 인스턴스를 만듭니다. 생성되는 순간 이 아이템은 원본으로부터 독립되며 같은 원본으로부터 생성된 다른 아이템들로부터 독립적으로 변경될 수 있게 됩니다. 아이템 인스턴스는 독립적인 성장 정보, 수량, 각인 정보, 내구도 등을 가지고 있습니다. 아이템 상세정보는 이런 정보를 표시하기에 적합하게 설계됩니다.
같은 인터페이스를 아이템 모양으로 표시된 모든 곳에서 사용하려고 하면 서로 다른 요소를 아이템 모양으로 표현하려고 할 때와 비슷한 문제가 생깁니다. 보상 정보를 보여줄 때 이들은 아이템 모양으로 표현되지만 아직 아이템 인스턴스가 아닙니다. 아직 성장 정보도 없고 사용할 수도 없고 내구도도 없고 수량도 없고 각인 정보도 없습니다. 아직 거래소에 올릴 수도 없고 보유하지 않았으므로 채팅창에 붙여 넣을 수도 없습니다. 아이템 상세정보 인터페이스를 공유하려면 이 원본 아이템 정보와 이를 복제한 아이템 인스턴스가 서로 할 수 있는 일과 할 수 없는 일을 구분해 상황에 따라 이들을 구분할 수 있도록 인터페이스를 정교하게 설계해야 합니다. 이 개발은 결코 저렴하지 않습니다.
겉보기에는 가격이 낮아 쉽게 시작해 결국 상당한 비용을 사용하게 됩니다. 이렇게 서로 다른 여러 가지 요소를 아이템 모양으로 표현하고 또 이들을 같은 인벤토리 인터페이스와 아이템 상세정보 인터페이스를 통해 표현할 때 좋은 결과를 만들기 쉽지 않습니다. 수많은 예외 상황에 대비해야만 좋은 인터페이스를 설계할 수 있습니다. 처음부터 이 인터페이스가 원본 인스턴스에 따라 달리 동작해야 하며 게임 상에는 원래 아이템이 아닐 법한 요소들 역시 아이템 모양으로 표시되기도 한다는 점을 고려해야 합니다. 아이템 상세정보 인터페이스를 아이템 모양으로 표시되는 모든 요소의 모든 상황에 사용한다는 발상 자체는 나쁘지 않지만 이 발상은 비용이 낮지 않음을 감안하고 시작해야 합니다.