Nakama Multiplayer Engine #

Nakama Multiplayer Engine은 게임 플레이에 따라 수백(또는 수천)개의 대결을 실행할 수 있는 _단일 Nakama 노드_를 통해 모든 게임 카테고리에서 협력 및 경쟁 게임 플레이를 강화하는 데 사용할 수 있습니다. 자세한 내용은 벤치마크를 참조하세요.

멀티플레이어 기능은 게임 플레이 데이터(예: 플레이어 위치, 움직임)의 실시간 교환이라는 점에서 다른 실시간 기능(예: 채팅)과 구별됩니다. 게임 형식에 따라 플레이어 간에 교환해야 하는 게임플레이 데이터의 특성과 궁극적으로 멀티플레이어가 게임에 가장 잘 통합되는 방식이 결정됩니다.

멀티플레이어 게임은 동기식 실시간 또는 턴 기반의 두 가지 카테고리 중 하나로 분류될 수 있습니다.

동기식 실시간 #

이름을 통해 알 수 있듯이 플레이어의 움직임, 발사체 등과 같은 게임 플레이 데이터의 빠르고 지속적인 교환이 필요한 게임입니다. 동기식 실시간 멀티플레이어 게임에는 중계(클라이언트 권한 보유라고도 함) 및 (서버) 권한 보유라는 두 가지 유형의 구현이 있습니다.

중계 #

중계된 멀티플레이어 모델에서 Nakama는 클라이언트 간의 게임 플레이 데이터 중계 역할을 하므로 전송되는 데이터가 무엇인지 데이터가 정확한지 알 수 없습니다.'

서버에서 유지 관리하는 유일한 정보는 각 대결의 ID와 각 대결의 현재 상태 목록입니다. 사용자는 클라이언트에서 보낸 메시지로 대결을 만들고 가입하고 나갈 수 있습니다. 대결을 통해 전송된 모든 데이터는 즉시 다른 모든 대결 상대에게 전달됩니다.

중계된 대결은 메모리에 보관되며 마지막 참여자가 떠날 때까지 서버에 존재합니다.

권한 보유 #

권위 보유 멀티플레이어 모델에서 게임플레이 데이터의 모든 교환은 서버에서 검증되고 브로드캐스트됩니다. 이 모델에서는 Nakama에 의해 적용될 게임플레이 규칙에 대한 사용자 지정 서버 런타임 코드를 작성합니다(즉, 몇 명의 플레이어가 가입할 수 있는지, 진행 중인 대결에 가입할 수 있는지 여부 등).

권한 보유 멀티플레이는 빠르게 진행되는 실시간 게임 플레이에 적합합니다. 메시지는 서버로 전송되고, 서버는 환경과 플레이어의 변경 사항을 계산하고, 데이터는 관련 피어에게 브로드캐스트됩니다. 일반적으로 게임 플레이가 응답성을 느끼려면 높은 틱 속도가 필요합니다.

차례 기반 멀티플레이어 #

차례 기반 멀티플레이어 게임에서 게임 플레이는 플레이어 간에 번갈아 진행됩니다. 각 플레이어의 차례 빈도는 게임 유형에 따라 다릅니다. 이러한 게임은 “능동적"이거나 “수동적"일 수 있습니다.

능동적 #

“능동적” 차례 기반 게임에서 플레이어는 빠르게 차례를 바꾸며 대결 중 연결된 상태를 유지합니다. 예를 들어, Clash Royale 또는 포커 게임을 생각해 보십시오. 이러한 게임에서 서버는 입력을 수신하고 입력을 검증한 후 플레이어에게 브로드캐스트합니다. 주고 받는 메시지의 속도가 낮기 때문에 예상되는 틱 속도는 상당히 낮습니다.

수동적 #

“수동적” 게임에서 게임 플레이는 몇 시간에서 몇 주에 걸쳐 진행될 수 있습니다. Words with Friends를 생각해 보세요. 여기서 서버는 입력을 수신하고 입력을 검증하고 입력을 데이터베이스에 저장하고 다음 게임 플레이 시퀀스까지 서버 루프를 종료하기 전에 연결된 모든 피어에 변경 사항을 브로드캐스트합니다.

수동적 스타일 게임플레이를 위한 멀티플레이어 구현은 게임이 완전히 비동기식인지 아니면 실시간 게임플레이 요소가 있는지(플레이어도 온라인 상태일 수 있고 플레이어 간의 실시간 상호작용을 활성화하려는 경우)에 따라 달라집니다.

전자의 경우 실시간 기능이 없는 그룹을 사용하여 모든 대결 참여자가 동일한 그룹의 구성원인 멀티플레이어 “대결"을 나타낼 수 있습니다. “대결” 소유자는 그룹을 생성한 사용자 또는 시스템 사용자일 수 있습니다.

Nakama 저장소 엔진은 대결 상태를 저장하는 데 사용할 수 있으며, 각 “대결"의 그룹 ID는 저장되는 key입니다. 그런 다음 일련의 RPC를 사용하여 저장된 상태를 조정하고 그룹(대결) 참여자에게 알림을 보낼 수 있습니다.

실시간 기능의 일부 요소가 있는 게임의 경우, 허용되는 가장 낮은 틱 속도(1)로 권위 보유 대결을 사용할 수 있습니다.

대결 로직에서 대결 참여자 목록은 대결 상태로 저장해야 합니다. 대결 참여자가 온라인 상태이면 대결 상태를 보내고 대결 루프를 계속 실행합니다. 모든 참여자가 오프라인이면 대결 루프 종료 시 원하는 key 및 시스템 사용자 ID를 사용하여 대결 상태를 데이터베이스에 기록한 다음 대결을 종료합니다.

세션 기반 멀티플레이어 #

일반적으로 복잡한 물리/그래픽이 많은 게임에만 필요한 세션 기반 멀티플레이어의 경우, 각 멀티플레이어 대결을 위한 전용 서버와 함께 게임플레이 물리 서버 측(예: 헤드리스 Unity 또는 Unreal 인스턴스에서)을 실행하고 있는 것입니다.

Nakama를 사용하여 세션 기반 멀티플레이어 게임의 헤드리스 인스턴스와 멀티플레이어 게임플레이의 다양한 측면을 관리할 수 있습니다. Nakama의 매치메이커를 사용하여 플레이어의 상대를 찾아 대결을 생성할 수 있으며, 대결이 끝나면 Nakama가 해당 결과를 보고하고 여기에서 플레이어를 옮길 수 있습니다.

세션 기반 멀티플레이어 프로젝트에 Nakama를 사용하는 방법에 대해서는 Heroic Labs에 문의하십시오.

대결 목록 #

대결 목록매치메이커와 함께 플레이어가 멀티플레이어 대결을 찾을 수 있도록 Nakama에서 사용할 수 있는 두 가지 방법 중 하나입니다.

대결 목록은 플레이어에게 가입할 기존 대결 목록을 표시하는 데 사용되며 대결 로비를 만들 때도 사용할 수 있습니다. 대결 레이블 및 기타 원하는 쿼리를 토대로 목록을 구체화할 수 있습니다.

매치메이커 #

대결 목록을 사용하여 플레이어가 가입할 기존 대결을 찾는 경우 Nakama의 매치메이커를 사용하면 사용자가 새로운 대결, 그룹 및 기타 활동을 만들기 위해 상대와 팀원을 찾을 수 있습니다.

매치메이커는 현재 상대방(또는 팀원)을 찾고 있는 사용자 풀을 유지하며 좋은 대결이 가능할 때마다 해당 사용자들을 함께 배치합니다. 매치메이킹 요청을 수신 및 추적한 다음 사용자의 속성 및 쿼리에 지정된 기준에 따라 해당 사용자를 그룹화합니다.