> 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 %}

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

{% embed url="<https://youtu.be/IwgOm2nmD9s>" %}

Это руководство посвящено добавлению хостинга серверов 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/perekhod-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](https://cloud.unity.com/) в разделе **Администрирование** > **Секреты**:

* `EDGEGAP_API_TOKEN` - Ваш API-токен Edgegap.

Найдите свой токен в [панели управления Edgegap](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 или редактора.](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" %}
Для крупных мировых запусков доступна более масштабируемая альтернатива с использованием [Webhooks](/ru/learn/orkestraciya/deployments.md#webhooks) .
{% endhint %}

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

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

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

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

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

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