個人マッチメイキング
個人マッチメイキングは、ユーザーが一人でゲームに参加したいときに使用されます。
SDKにおけるマッチメイキング操作フロー¶
Hive SDKを使用して個人マッチメイキングを実装する際の全体的な操作の流れは、以下の図に示されています。
マッチリクエスト¶
各ユーザーのマッチングをリクエストしています。
リクエストを行う前に、HiveコンソールでmatchId
に対応するマッチ情報を登録する必要があります。
マッチをリクエストする際は、スコア point
(0から10^10未満の整数)と追加情報 extraData
(ニックネーム、レベル、国などの256文字以内の情報)を引数として提供する必要があります。
Warning
マッチが進行中の間に再度マッチをリクエストすると、コールバック関数は既存のマッチを停止することなくエラー値(MatchMakingResponseError
)を返します。 したがって、マッチをリクエストする前に、まずマッチングステータスを確認するを使用してマッチングのステータスを確認してください。
こちらはマッチングリクエストのための例のコードです。
APIリファレンス: MatchMaking .requestMatchMaking
using hive;
int matchId = 25; // matchId registered in the console
int point = 300; // points used for the match
string extraData = "your extraData"; // additional information to use for the match
MatchMaking.requestMatchMaking(matchId, point, extraData, (ResultAPI result, MatchMaking.MatchMakingData data) => {
if (result.isSuccess()) {
// call successful
} else {
// Call failed. See error code below
}
});
API リファレンス: MatchMaking ::requestMatchMaking
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
int matchId = 25; // コンソールに登録されたmatchId
int point = 300; // マッチに使用されるポイント
string extraData = "your extraData"; // マッチに使用される追加情報
MatchMaking::requestMatchMaking(matchId, point, extraData, [=](ResultAPI const & result, MatchMakingData data) {
if (result.isSuccess()) {
// call successful
} else {
// Call failed. See error code below
}
});
API リファレンス: MatchMaking.requestMatchMaking
import com.hive.MatchMaking
import com.hive.ResultAPI
val matchId = 25 // コンソールに登録されたmatchId
val point = 300 // マッチに使用されるポイント
val extraData = "your extraData"; // マッチに使用する追加情報
MatchMaking.requestMatchMaking(matchId, point, extraData, object : MatchMaking.MatchMakingDataListener {
override fun onMatchMakingData(result: ResultAPI, data: MatchMaking.MatchMakingDataListener) {
if (result.isSuccess) {
// 呼び出し成功
} else {
// 呼び出し失敗。以下のエラーコードを参照
}
}
})
API リファレンス: MatchMaking .requestMatchMaking
import com.hive.MatchMaking;
import com.hive.ResultAPI;
int matchId = 25; // コンソールに登録されたmatchId
int point = 300; // マッチに使用されるポイント
String extraData = "your extraData"; // マッチに使用される追加情報
MatchMaking.INSTANCE.requestMatchMaking(matchId, point, extraData, (result, data) -> {
if (result.isSuccess()) {
// 呼び出し成功
} else {
// 呼び出し失敗。以下のエラーコードを参照
}
});
APIリファレンス: MatchMakingInterface.requestMatchMaking
import HIVEService
let matchId: Int = 25 // matchId registered in the console
let point: Int = 300 // points used for the match
let extraData: String? = "your extraData" // additional information to use for the match
MatchMakingInterface.requestMatchMaking(matchId: matchId, point: point, extraData: extraData) { result, data in
if result.isSuccess() {
// call successful
}
else {
// Call failed. See error code below
}
}
API リファレンス: HIVEMatchMaking requestMatchMaking
#import "HIVEService.h"
NSInteger matchId = 25; // コンソールに登録された matchId
NSInteger point = 300; // マッチに使用されるポイント
NSString *extraData = @"your extraData"; // マッチに使用される追加情報
[MatchMakingInterface requestMatchMakingWithMatchId:matchId
point:point
extraData:extraData
completion:^(HIVEResult *result, id data) {
if ([result isSuccess]) {
// 成功した呼び出し
} else {
// 呼び出しに失敗しました。以下のエラーコードを参照してください
}
}];
requestMatchMatking()
およびgetRequestingStatus()
メソッドを呼び出す結果は、MatchMakingData
オブジェクトを返します。
MatchMakingDataオブジェクトの構造¶
マッチングリクエストおよびマッチングステータスの確認リクエストに対する応答として返されるオブジェクトです。リクエスト中に入力された情報とマッチング結果情報が含まれています。
フィールド名 | 説明 | タイプ |
---|---|---|
requestPlayerId | マッチをリクエストしたユーザーのプレイヤーID | Long |
requestGameIndex | マッチゲームインデックス | Int |
requestMatchId | リクエストされたマッチID(Hiveコンソールに登録された形式) | Int |
requestStatus | マッチリクエストのステータス(requested : マッチがリクエストされた、notRequested : リクエストされていない(または、すでにマッチされた進行中のマッチがない)) | String |
requestTimeUtc | マッチリクエストの時間(例: 2025-01-02T11:13:50.96) | String |
requestPoint | マッチスコア | Int |
requestExtraData | マッチリクエスト中に提供された追加情報(リクエスト中にextraDataが使用されている場合に存在) | String |
matchingStatus | マッチ進行状況のステータス(matchingInProgress : マッチング進行中、timeout : 制限時間内にマッチングが発生しなかった、matched : マッチング成功) | String |
matchingType | チーム参加か個人参加か(matchingStatusがmatchedの場合に存在)(team : チーム、player : 個人、unknown : マッチング確認が利用できない場合) | String |
matchingId | 成功したマッチに割り当てられたID(matchingStatusがmatchedの場合に存在)(例: 539:21_2025-01-02T11:45:55.25_1) | String |
matchingPlayerInfoList | マッチされたユーザーの情報リスト MatchingResultPlayerInfo(matchingStatusがmatchedの場合に存在、個人参加に存在) | Array |
matchingTeamInfoList | チーム情報のリスト MatchingResultTeamInfo(matchingStatusがmatchedの場合に存在、チーム参加に存在) | Array |
MatchingResultTeamInfoオブジェクト構造¶
これは、チームが試合に参加し、マッチングステータスが一致したときに渡されるオブジェクトです。チームインデックスと、そのチームに所属するユーザーに関する情報が含まれています。
フィールド名 | 説明 | タイプ |
---|---|---|
teamIndex | チームのユニークインデックス | Int |
playerInfos | チームに属するユーザー情報のリスト MatchingResultPlayerInfo | Array |
Note
個人マッチをリクエストする際は、個別マッチとチームマッチの両方が利用可能であり、マッチ結果に応じて、対応する matchingPlayerInfoList
または matchingTeamInfoList
が提供されます。
MatchingResultPlayerInfo データ構造¶
これは、ユーザーが個人マッチに参加し、マッチングステータスがマッチしたときに送信されるオブジェクトです。マッチに参加したユーザーに関する情報が含まれています。
フィールド名 | 説明 | タイプ |
---|---|---|
playerId | マッチしたユーザーのplayerId | Long |
point | マッチしたユーザーのポイント | Int |
extraData | マッチしたユーザーが提供した追加情報(ユーザーがリクエスト時にextraDataを使用した場合に存在) | String |
一致状況を確認¶
個人マッチに参加しているユーザーのマッチング状況を確認しています。
一致するステータスチェックメソッドを呼び出すと、以下の3つの一致するステータスのいずれかが返されます。
- マッチング中 (matchingStatus: matchingInProgress)
- マッチング成功 (matchingStatus: matched)
- タイムアウト (matchingStatus: timeout)
これは一致状況を確認するためのサンプルコードです。
APIリファレンス: MatchMaking .getRequestingStatus
APIリファレンス: MatchMaking ::getRequestingStatus
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
int matchId = 25; // コンソールに登録された matchId
MatchMaking::getRequestingStatus(matchId, [=](ResultAPI const & result, MatchMakingData data) {
if (result.isSuccess()) {
// call successful
} else {
// Call failed. See error code below
}
});
APIリファレンス: MatchMaking.getRequestingStatus
import com.hive.MatchMaking
import com.hive.ResultAPI
val matchId = 25 // コンソールに登録されたmatchId
MatchMaking.getRequestingStatus(matchId, object : MatchMaking.MatchMakingDataListener {
override fun onMatchMakingData(result: ResultAPI, data: MatchMaking.MatchMakingDataListener) {
if (result.isSuccess) {
// 成功した呼び出し
} else {
// 呼び出しに失敗しました。以下のエラーコードを参照してください
}
}
})
APIリファレンス: MatchMaking.INSTANCE .getRequestingStatus
APIリファレンス: MatchMakingInterface.getRequestingStatus
APIリファレンス: HIVEMatchMaking getRequestingStatus
一致処理中¶
マッチングステータスが進行中の場合、マッチングステータスがマッチ済みの状態に達したかどうかを確認するために、メソッドを繰り返し呼び出す必要があります。
リピートコールサイクルは3秒から10秒の間隔で呼び出すことを推奨します。アプリの実装の特性に応じて、時間間隔を延長することも可能です。
一致成功¶
一致ステータスが一致している場合、開発者のゲームが起動します。言い換えれば、Hive SDKを通じて接続されたユーザーが一致している場合、開発者のゲームに参加できます。
タイムアウト¶
マッチングステータスがタイムアウト(matchingStatus: timeout
)の場合は、既存のマッチを削除し、再度マッチをリクエストする必要があります。
一致を削除¶
既存のマッチを削除しています。
次のいずれかのケースに該当する場合は、試合を削除しなければなりません。
- ユーザーがマッチをキャンセルした場合
- マッチングステータスがタイムアウトの場合 (matchingStatus: timeout)
-
ユーザー間のゲームが正常に完了した場合
※ ゲームサーバーまたはゲームクライアントでゲーム結果(ランキング、スコア、勝敗状況など)を更新した後、試合の削除をリクエストする必要があります
これはマッチを削除するための例のコードです。
APIリファレンス: MatchMaking .deleteRequesting
APIリファレンス: MatchMaking ::deleteRequesting
API リファレンス: MatchMaking.deleteRequesting
import com.hive.MatchMaking
import com.hive.ResultAPI
val matchId = 25 // コンソールに登録されたmatchId
MatchMaking.deleteRequesting(matchId, object : MatchMaking.MatchMakingResultListener {
override fun onMatchMakingResult(result: ResultAPI) {
if (result.isSuccess) {
// 呼び出し成功
} else {
// 呼び出し失敗。以下のエラーコードを参照してください
}
}
})
APIリファレンス: MatchMaking.INSTANCE .deleteRequesting
APIリファレンス: MatchMakingInterface.deleteRequesting
APIリファレンス: HIVEMatchMaking deleteRequesting
エラーコード¶
エラーコード | メッセージ | 説明 |
NEED_INITIALIZE | MatchMakingNotInitialized | SDKのセットアップが行われていない場合 (AuthV4.setup) |
INVALID_SESSION | MatchMakingNeedSignIn | AuthV4のサインインが行われていない場合 |
RESPONSE_FAIL | MatchMakingResponseError | - API呼び出し中の不正なパラメータによる失敗 - ネットワークの問題による失敗 - すでにマッチングリクエスト状態にあるときに再度マッチングを要求 - リクエストされていないマッチングの削除を要求 |