Документация · 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).
Установка
- Добавьте пакет
com.gameway.sdkв проект: Window, Package Manager, +, Add package from tarball… и выберите полученный файл, либо добавьте"com.gameway.sdk": "file:<путь>/com.gameway.sdk"вPackages/manifest.jsonдля пакета на диске. - Откройте Edit, Project Settings, Gameway. Введите номер приложения из портала разработчика (число рядом с названием приложения), посмотрите горячую клавишу оверлея по умолчанию и нажмите Validate.
- Соберите игру. Проверки сборки предупреждают о пересечении горячих клавиш и останавливают сборку, для платформы которой нет нативной библиотеки.
В пакете три нативные библиотеки, по одной на настольную платформу, и он загружает их сам. Не подменяйте их вручную: они собираются вместе с C#-привязками, и в сборке для разработки SDK отказывается работать, если они расходятся.
Запуск и остановка
Инициализируйте один раз, из главного потока, при старте игры. Всё остальное нужно вызывать из того же потока.
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