매치메이킹 (Matchmaking)
Xbox Live 및 UWP에서 멀티플레이어 매치메이킹을 설정하려면 Xbox 개발자 포털에서 세션 템플릿 및 매치메이킹 호퍼를 구성해야 합니다. GameMaker는 UWP 대상을 통해 이를 지원하며 다음과 같은 기능을 제공합니다:
- 멀티플레이어 세션 생성
- 멀티플레이어 세션 찾기 및 참여
- 관련 플레이어가 세션에 참여하거나 떠날 때 알림 수신
- 세션 호스트가 다른 사용자로 이동할 때 알림 수신
- 세션 내 사용자 목록 가져오기
- 세션 나가기
세션 템플릿
멀티플레이어 세션을 생성하려면 사용할 세션 템플릿을 지정해야 합니다. 세션 템플릿은 XDP에서 정의되며, 아래는 예시입니다:
필드 | 설명 |
---|---|
세션 이름 | MatchSession |
계약 버전 | 107 |
세션 템플릿 (JSON 텍스트) | {"constants": {"system": {"version": 1,"maxMembersCount": 12,"capabilities": {},"memberInitialization": {"externalEvaluation": false,"membersNeededToStart": 1}},"custom": {}}} |
필드에 대한 설명은 XDK 도움말 파일의 "세션 개요"에서 확인할 수 있습니다. 현재 GameMaker에서 세션 매개변수를 동적으로 설정하는 것은 지원하지 않습니다.
매치메이킹 호퍼
세션을 찾을 수 있도록 매치메이킹 호퍼도 설정해야 합니다 (이 또한 XDP에서 수행됨). 호퍼는 플레이어를 매칭할 때 사용되는 규칙을 정의하는 데 사용됩니다. 세션 매개변수와 마찬가지로 GameMaker: Studio에서 호퍼 매개변수를 동적으로 설정하는 것은 지원하지 않습니다. 자세한 내용은 XDK 도움말 파일의 "스마트매치 매치메이킹 구성" 섹션을 참조하세요.
사용 가능한 함수
Xbox Live 매치메이킹을 위해 사용할 수 있는 함수는 다음과 같습니다:
xboxlive_matchmaking_start
xboxlive_matchmaking_stop
xboxlive_matchmaking_create
xboxlive_matchmaking_find
xboxlive_matchmaking_session_get_users
xboxlive_matchmaking_join_session
xboxlive_matchmaking_session_leave
GameMaker는 네트워크에서 다른 플레이어를 초대하거나 다른 플레이어의 세션에 참여하기 위한 추가 매치메이킹 함수를 제공합니다. 사용 가능한 함수는 다음과 같습니다:
xboxlive_matchmaking_send_invites
xboxlive_matchmaking_set_joinable_session
xboxlive_matchmaking_join_invite
초대 수락
플레이어가 다른 플레이어의 초대를 수락하면 두 가지 일이 발생합니다:
- 게임이 현재 실행 중인 경우,
Social Asynchronous Event
를 수신하게 되며,async_loadDS
맵에 다음 키/값이 포함됩니다: - "id" - MATCHMAKING_INVITATION으로 설정됩니다.
- "invitation_id" - 고유한 세션 ID 값
- "invitation_host" - 세션 호스트의 고유한 세션 ID 값
이 ID와 호스트 값을 저장한 후, 필요한 세션을 나가고 xboxlive_matchmaking_join_invite()
함수를 호출하여 초대 ID와 초대 호스트 값을 인수로 전달합니다.
- 게임이 현재 실행 중이지 않은 경우, OS에 의해 게임이 시작됩니다. 동일한 유형의
Social Asynchronous Event
를 수신하게 되며, 위에 나열된 것과 동일한 키가 설정됩니다. 이 값을 변수에 저장한 후 Xbox Live 매치메이킹에 연결하고 마지막으로xboxlive_matchmaking_join_invite()
를 호출합니다.
xboxlive_matchmaking_join_invite()
를 호출하면 사용자가 세션에 참여하려고 시도하며, 이 세션에 대해 xboxlive_matchmaking_find()
를 호출한 것처럼 비동기 소셜 이벤트를 수신하게 됩니다.
활용 예제
// 멀티플레이어 세션 시작
xboxlive_matchmaking_start();
// 세션 생성
var session_template = '{"constants": {"system": {"version": 1,"maxMembersCount": 12,"capabilities": {},"memberInitialization": {"externalEvaluation": false,"membersNeededToStart": 1}},"custom": {}}}';
xboxlive_matchmaking_create("MatchSession", session_template);
// 세션 찾기
xboxlive_matchmaking_find();
// 세션에 참여하기
var invitation_id = "초대_ID"; // 초대 ID를 저장한 변수
var invitation_host = "호스트_ID"; // 호스트 ID를 저장한 변수
xboxlive_matchmaking_join_invite(invitation_id, invitation_host);
// 세션에서 나가기
xboxlive_matchmaking_session_leave();
// 초대 보내기
xboxlive_matchmaking_send_invites("초대할 사용자 ID");
// 세션을 참여 가능 상태로 설정
xboxlive_matchmaking_set_joinable_session(true);
// 세션 사용자 목록 가져오기
var users = xboxlive_matchmaking_session_get_users();
// 매치메이킹 중지
xboxlive_matchmaking_stop();