> For the complete documentation index, see [llms.txt](https://docs.edgegap.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.edgegap.com/ru/docs/tools-and-integrations/razvertyvanie-iz-ugs.md).

# Развертывание из UGS

Следуйте этому руководству, если хотите продолжать использовать Unity Matchmaker и развертывать серверы в Edgegap.

{% hint style="success" %}
Ищете альтернативы? Рассмотрите наш управляемый [Подбор игроков](/ru/learn/podbor-igrokov.md) с [интеграцией SDK и примерами](/ru/unity/podbor-igrokov.md).
{% endhint %}

### Начало работы

Это руководство сосредоточено на добавлении хостинга серверов Edgegap в качестве поставщика хостинга, предполагая, что:

* у вас есть рабочая настройка Unity Matchmaking,
* вы зарегистрированы в Edgegap и [загрузили вашу сборку сервера Unity](/ru/unity.md).

Пожалуйста, обратитесь к [документации Unity по Matchmaking](https://docs.unity.com/en-us/matchmaker) по вопросам матчмейкинга.

{% hint style="info" %}
См. [Перейти с Multiplay](/ru/docs/tools-and-integrations/pereiti-s-multiplay.md) для сравнения и сопоставления концепций Multiplay с хостингом Edgegap.
{% endhint %}

[Правильный выбор расположения для вашего сервера может снизить задержку в среднем до 58%!](/ru/learn/orkestraciya/deployments.md#server-placement)

В этом руководстве мы рассмотрим:

* сборку и развертывание `EdgegapAllocator` модуль cloud script для вашего Matchmaker,
* получение публичных IP-адресов игроков, используемых для оптимального размещения сервера,
* реализацию слушателя webhook в UGS cloud script и получение назначения сервера.

### Edgegap Allocator

Начните с [загрузки исходного кода репозитория](https://github.com/Unity-Technologies/matchmaker-hosting-providers/tree/main) с `EdgegapAllocator` .

Это [наш cloud script](https://github.com/Unity-Technologies/matchmaker-hosting-providers/blob/main/modules/EdgegapAllocator/CONFIGURATION.md) используемый для запуска новых серверов, который запускается Unity matchmaker после того, как матч собран. Это официальная интеграция, одобренная Unity.

#### Необходимые секреты

Сначала добавьте эти секреты в [Unity Dashboard](https://cloud.unity.com/) в разделе **Администрирование** > **Секреты**:

* `EDGEGAP_API_TOKEN` — ваш токен API Edgegap.

Найдите свой токен в [Edgegap Dashboard](https://app.edgegap.com/user-settings?tab=tokens).

#### Необходимые изменения кода

Отредактируйте `Project/EdgegapAllocator.cs` и обновите эти константы:

Замените на имя вашего приложения Edgegap из [списка приложений](https://app.edgegap.com/application-management/applications/list).

{% code title="ApplicationName (строка 34)" %}

```csharp
private const string ApplicationName = "MyApp"; // TODO: замените на фактическое имя приложения
```

{% endcode %}

Замените на имя версии вашего приложения Edgegap, которую вы хотите использовать.

{% code title="VersionName (строка 35)" %}

```csharp
private const string VersionName = "MyVersion"; // TODO: замените на фактическое имя версии
```

{% endcode %}

Замените на имя порта версии вашего приложения Edgegap, которое будет использоваться для подключения игроков.

{% code title="PortName (строка 36)" %}

```csharp
private const string PortName = "gameport"; // TODO: замените на фактическое имя порта
```

{% endcode %}

#### Разверните модуль

[Следуйте официальным инструкциям Unity, чтобы развернуть ваш настроенный модуль с помощью CLI или Editor.](https://github.com/Unity-Technologies/matchmaker-hosting-providers/tree/main#deploy-the-module)

### Получение IP игрока

{% hint style="warning" %}
**Если IP-адрес игрока не указан, ваши развертывания по умолчанию используют локацию Los Alamos.**
{% endhint %}

Чтобы по запросу предоставлять оптимальное расположение сервера для каждого матча, Edgegap требует указывать IP-адреса игроков при создании развертывания. Хотя Unity не предоставляет эту функцию, вы можете использовать наш фрагмент C#, чтобы реализовать это в клиентских приложениях вашей игры с помощью бесплатного сервиса [ipify](https://ipify.org):

{% code title="PlayerNetworkBehaviour.cs" %}

```csharp
public class PlayerNetworkBehaviour : MonoBehaviour {
    public IEnumerator GetPublicIP(Action<string> callback)
    {
        UnityWebRequest request = UnityWebRequest.Get("https://api.ipify.org?format=json");
        yield return request.SendWebRequest();
    
        if (request.result == UnityWebRequest.Result.Success)
        {
            string responseText = request.downloadHandler.text;
            string clientIp = JObject.Parse(responseText)["ip"].ToString();
            callback(clientIp);
        }
        else
        {
            Debug.LogError("Не удалось получить публичный IP-адрес.");
        }
        request.Dispose();
    }
}
```

{% endcode %}

Ожидается, что каждый игрок предоставит свой публичный IP-адрес, используя пользовательские данные в своих билетах:

```csharp
CreateTicketOptions ticketOptions = new CreateTicketOptions(
    queueName: "my-queue", 
    attributes: new Dictionary<string, object>
    {
        { "player_ip": "<insert-ip>" },
    }
);
```

### Получение назначения

Назначение можно получить с помощью стандартных методов Unity matchmaking.

Наш пример будет обрабатывать назначения за вас с помощью [**Status API, ограниченного до 20 запросов/с**](https://docs.edgegap.com/docs/api/dedicated-servers#get-v1-status-deployment_id)**.**

Этого достаточно для большинства игр. Если вы ожидаете более 50 000 CCU, рассмотрите альтернативные методы.

#### Альтернативное назначение

{% hint style="info" %}
Для крупных мировых запусков доступна более масштабируемая альтернатива с использованием [Webhook'ов](/ru/learn/orkestraciya/deployments.md#webhooks) доступна.
{% endhint %}

После того как матч создан и ваш cloud script запрашивает новое развертывание, ваш ответ еще не будет содержать данные подключения. Вместо этого вы получите своего рода квитанцию — идентификатор развертывания.

Ваша функция allocator должна сохранить этот идентификатор развертывания в ваших UGS Game Data вместе с идентификаторами сопоставленных игроков, чтобы позже вы могли найти игроков и предоставить данные подключения.

Теперь вам нужно создать еще одну функцию cloud script `AssignmentProcessor`  с общедоступным URL. Этот URL должен быть включен в запрос на развертывание вашего Allocator как `webhook_on_ready` .

После того как Edgegap развернет ваш игровой сервер, он отправит HTTP-событие webhook со всеми данными подключения, такими как FQDN (URL) и внешний порт для подключения клиентов, обратно в ваш новый cloud script. Ваш `AssignmentProcessor`  должен будет найти идентификатор развертывания и сохранить данные подключения вместе с ним.

Ваши игровые клиенты должны опрашивать эти игровые данные и пытаться подключиться, как только будут получены FQDN и внешний порт.

<figure><img src="/files/b6377861beae1d6c0b100fcb8c87cf0a5a5a5fc1" alt=""><figcaption></figcaption></figure>
