メインコンテンツまでスキップ
Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

SDK の Turn Manager の追加機能

AGS SDK の Turn Manager API は、ゲームクライアントの追加要件に対応するいくつかのユーティリティ機能をサポートしています。

TURN サーバーを取得する

この関数は、利用可能なすべての TURN サーバーのリストを取得するためにゲームクライアントによって呼び出されます。

AccelByteOnlineSubsystemPtr->GetApiClient()->TurnManager.GetTurnServersV2(THandler<FAccelByteModelsTurnServerList>::CreateLambda(
[](const FAccelByteModelsTurnServerList& Result)
{
UE_LOG(LogTemp, Log, TEXT("Get Turn Servers Success!"));
}),
FErrorHandler::CreateLambda([](const int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Log, TEXT("Get Turn Servers Failed! [%d]: %s"), ErrorCode, *ErrorMessage);
}));

最も近い TURN サーバーを取得する

この関数は、利用可能なすべての TURN サーバーのリストを自動的に取得し、すべてのサーバーに ping を送信して最も近いリージョンを提供します。

AccelByteOnlineSubsystemPtr->GetApiClient()->TurnManager.GetClosestTurnServerV2(THandler<FAccelByteModelsTurnServer>::CreateLambda(
[](const FAccelByteModelsTurnServer& Result)
{
UE_LOG(LogTemp, Log, TEXT("Get Closest Turn Server Success!"));
}),
FErrorHandler::CreateLambda([](const int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Log, TEXT("Get Closest Turn Server Failed! [%d]: %s"), ErrorCode, *ErrorMessage);
}));

リージョン別に TURN サーバーのレイテンシを取得する

この関数は、パラメータで特定のリージョンを使用して、合計レイテンシをミリ秒単位で返します。

AccelByteOnlineSubsystemPtr->GetApiClient()->TurnManager.GetTurnServerLatencyByRegion(Region, THandler<int32>::CreateLambda(
[&FuncName, &OutResponse, &bIsOk, &bIsDone](const int32& Result)
{
UE_LOG(LogTemp, Log, TEXT("Get Turn Server Latency By Region Success!"));
}),
FErrorHandler::CreateLambda([&bIsDone](const int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Log, TEXT("Get Turn Server Latency By Region Failed! [%d]: %s"), ErrorCode, *ErrorMessage);
}));

TURN サーバーのレイテンシを取得する

この関数は、利用可能なすべての TURN サーバーリージョンのレイテンシを返します。

AccelByteOnlineSubsystemPtr->GetApiClient()->TurnManager.GetTurnServerLatencies(THandler<TArray<TPair<FString, float>>>::CreateLambda(
[&FuncName, &OutResponse, &bIsOk, &bIsDone](const TArray<TPair<FString, float>>& Result)
{
UE_LOG(LogTemp, Log, TEXT("Get Turn Server Latencies Success!"));
}),
FErrorHandler::CreateLambda([&bIsDone](const int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Log, TEXT("Get Turn Server Latencies Failed! [%d]: %s"), ErrorCode, *ErrorMessage);
}));

キャッシュされたレイテンシを取得する

AGS Unreal SDK は、利用可能なリージョンに ping を送信した後、レイテンシをキャッシュします。この関数はキャッシュされたレイテンシを返します。

AccelByteOnlineSubsystemPtr->GetApiClient()->TurnManager.GetCachedLatencies();

レイテンシを手動で計算する

サーバーリストを取得してレイテンシ計算をスキップするには、次のコード例に従ってください。

GetTurnServerOptionalParameters optionalParameters = new GetTurnServerOptionalParameters();
optionalParameters.AutoCalculateLatency = false;
TurnServerList getTurnServerResult = null;
AccelByteSDK.GetClientRegistry().GetApi().GetTurnManager().GetTurnServers(optionalParameters, result =>
{
if (result.IsError)
{
// Do something if the operation fails
UnityEngine.Debug.LogError($"failed to get TURN servers [{result.Error.Code}]:{result.Error.Message}");
return;
}

// Do something if the operation succeeds
getTurnServerResult = result.Value;
});

SDK は、レイテンシを計算するためのヘルパー関数も提供しています。

// Get this value from the result of GetTurnServers() interface
TurnServerList getTurnServerResult;
// Define a specific server
TurnServer turnServer = getTurnServerResult.servers[0];

#if !UNITY_WEBGL || UNITY_EDITOR
AccelByte.Models.AccelByteResult<int ,Error> pingResult = AccelByte.Utils.Networking.UdpPing(turnServer.ip, (uint) turnServer.qos_port);
#else
// Web platform doesn't support UDP
// Latency must be estimated to the region by sending an HTTP request
string url = AccelByte.Utils.Networking.GetTestServerUrlByRegion(turnServer.region);
AccelByte.Models.AccelByteResult<int ,Error> pingResult = AccelByte.Utils.Networking.HttpPing(url);
#endif
pingResult.OnSuccess(latency =>
{
Debug.Log($"Server {turnServer.region} has latency {latency} ms");
});
pingResult.OnFailed(error =>
{
Debug.LogWarning($"Failed calculating server {turnServer.region} latency.\n{error.Message}");
});