Перейти к содержимому

Документация · 03

Unity SDK

Пакет Unity com.gameway.sdk: вошедший пользователь, друзья, присутствие, приглашения, пропуска запуска и оверлей в игре.

3 минуты чтенияОбновлено 4 окт. 2026

Разделы документации

Оверлей, друзья, приглашения и онлайн-пропуска работают целиком с текущим приложением; Tactical Ops выходит с ними. На странице описаны имена, которые есть в пакете сегодня; что изменилось, смотрите в списке изменений полученной версии.

Требования

  • Unity 6000.6. Более старые версии не проверялись.
  • Пакет Input System 1.20.0 и модуль UI Toolkit (пакет перечисляет их как зависимости).
  • C# 9 и .NET Standard 2.1, Mono или IL2CPP, удаление неиспользуемого кода на уровне Minimal.
  • Настольные плееры: macOS (universal), Windows (x64) и Linux (x64). Выделенные серверы: Linux (x64).

Установка

  1. Добавьте пакет com.gameway.sdk в проект: Window, Package Manager, +, Add package from tarball… и выберите полученный файл, либо добавьте "com.gameway.sdk": "file:<путь>/com.gameway.sdk" в Packages/manifest.json для пакета на диске.
  2. Откройте Edit, Project Settings, Gameway. Введите номер приложения из портала разработчика (число рядом с названием приложения), посмотрите горячую клавишу оверлея по умолчанию и нажмите Validate.
  3. Соберите игру. Проверки сборки предупреждают о пересечении горячих клавиш и останавливают сборку, для платформы которой нет нативной библиотеки.

В пакете три нативные библиотеки, по одной на настольную платформу, и он загружает их сам. Не подменяйте их вручную: они собираются вместе с C#-привязками, и в сборке для разработки SDK отказывается работать, если они расходятся.

Запуск и остановка

Инициализируйте один раз, из главного потока, при старте игры. Всё остальное нужно вызывать из того же потока.

C#
using Gameway.Sdk;
using GW = Gameway.Sdk.Gameway;

public class PlatformBootstrap : UnityEngine.MonoBehaviour
{
    void Start()
    {
        GwResult r = GW.Init();   // the app id and options come from Project Settings
        if (r == GwResult.NotLaunchedByClient)
        {
            // started by double-click instead of by the app: show "restart via Gameway" and offer it
            bool quitNow;
            GW.RestartAppIfNecessary(GW.AppId, out quitNow);
            if (quitNow) UnityEngine.Application.Quit();
            return;
        }
        if (r.IsError()) UnityEngine.Debug.LogWarning("Gameway SDK: " + r.CodeName());

        GW.ConnectionStateChanged += (now, before, why) => UnityEngine.Debug.Log("connection: " + now);
        GW.TicketReady += e => { byte[] ticket = e.Payload; /* hand it to your connection code */ };
    }

    void OnDestroy() { GW.Shutdown(); }
}
  • Init() берёт номер приложения из Project Settings. Init(appId) передаёт его вручную.
  • NotLaunchedByClient значит, что игру запустили без приложения. Попросите игрока перезапустить её через приложение; это делает RestartAppIfNecessary.
  • В редакторе SDK работает в режиме разработчика с вашим собственным вошедшим клиентом; на портале это никогда не считается проверкой интеграции.
  • Пакет сам обрабатывает события в цикле игрока Unity каждый кадр. Вашему коду остаётся подписаться.

Что можно вызывать

Что нужноВызов
Вошедший игрокGetUser(out GwUser) или TryGetUser
Друзья и аватарыFriendCount, GetFriend, GetFriends(list), GetAvatarPath (отвечает Pending, затем событие AvatarReady)
ПрисутствиеSetRichPresence(key, value), ClearRichPresence(), SetJoinable(true, connect). См. Расширенный статус.
Приглашения и переход к другуSendInvite, RespondToInvite, JoinFriend, GetLaunchJoinString, ParseConnect; события InviteReceived, JoinRequested, JoinInfo
Пропуск запуска для сервераRequestTicket(serverId, "<ip:port>", includeName, out id) и событие TicketReady. См. Онлайн-пропуска.
ЧатRequestConversations, RequestChatHistory, SendChat, MarkChatRead и событие ChatMessage
Результаты запросовEventReceived для каждого события; неудавшийся запрос вызывает RequestFailed
ОверлейOverlay.ActivatedChanged, Overlay.Hotkey, Overlay.HotkeySource. См. Оверлей.

Коды результата

Каждый вызов возвращает GwResult. Ok и положительные значения — успех (Pending означает, что ответ придёт событием, NoData — что возвращать нечего). Отрицательные — ошибки: NotInitialized, WrongThread, Offline, NotOwned, RateLimited, NotFriend, NotJoinable, Denied, семейство Ticket… и Internal. CodeName() даёт стабильное имя для ваших журналов.

Ни один обратный вызов не уходит в нативный код, а бездействующий SDK не выделяет память в кадре, так что его можно оставлять включённым в каждом кадре выпущенной игры.

Сборки

  • Сборка выделенного сервера (UNITY_SERVER) включает только сборки Runtime и Server. Оверлея в ней никогда нет.
  • Безголовые плееры (-batchmode -nographics) работают без оверлея.
  • В macOS, если вы переподписываете приложение сами, подписывайте с codesign --deep, чтобы библиотека сохранила действительную подпись. Пакет умеет проверять результат: -executeMethod Gameway.Sdk.Editor.GamewayBuildChecks.VerifyMacBundleCli -gwApp <путь к .app>.

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

Примеры

  • NGO ticket approval: подтверждение подключения Netcode for GameObjects с пропусками запуска, от ограничения частоты до онлайн-проверки с отложенным подтверждением.
  • Overlay demo: инициализация, пауза вашего ввода, пока открыт оверлей, действующая горячая клавиша, расширенный статус и друзья.

Импортируйте их из записи пакета в Package Manager.

Gameway · 2026-10-04