← Назад к вопросам

Какие фреймворки сетевых функций использовал на прошлой работе?

1.0 Junior🔥 111 комментариев
#Опыт и софт-скиллы#Сеть и мультиплеер

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Использованные сетевые фреймворки в Unity

На последнем коммерческом проекте (мобильный онлайн-шутер с поддержкой до 10 игроков) я использовал Photon Unity Networking (PUN) как основной фреймворк, а для отдельных систем — Unity Netcode for GameObjects (NGO) и кастомные решения на WebSocket и REST API. Каждый инструмент применялся там, где его преимущества были максимальными.

Photon Unity Networking (PUN) – Основной выбор для геймплея

Мы выбрали PUN из-за его облачной инфраструктуры (из коробки), низкой задержки и отличной документации. Он обрабатывал основную игровую логику:

  • Синхронизация игровых объектов через PhotonView и потоковую передачу трансформов
  • Управление комнатами и сессиями через встроенные методы Matchmaking
  • RPC-вызовы для событий в реальном времени (выстрелы, получение урона)
// Пример синхронизации позиции через Photon
public class PlayerMovement : MonoBehaviourPun, IPunObservable
{
    private Vector3 networkPosition;
    
    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.IsWriting)
        {
            stream.SendNext(transform.position);
        }
        else
        {
            networkPosition = (Vector3)stream.ReceiveNext();
            // Интерполяция для плавности
            transform.position = Vector3.Lerp(transform.position, networkPosition, Time.deltaTime * 10);
        }
    }
}

Unity Netcode for GameObject (NGO) – Для кооперативных режимов

Для PvE-режимов мы использовали NGO, так как он лучше интегрирован с Unity ECS/DOTS (что было важно для ИИ противников) и предлагал:

  • Authoritative-серверную модель с повышенной защитой от читов
  • NetworkTransform с оптимизированной компрессией
  • Сетевые переменные (NetworkVariable<T>) для синхронизации состояния

Кастомные решения для вспомогательных систем

  1. WebSocket (через библиотеку WebSocketSharp) – Для реального чата и push-уведомлений в лобби
  2. REST API (через UnityWebRequest) – Для работы с бэкенд-сервисами:
    • Аутентификация и профили пользователей
    • Загрузка конфигураций баланса игры
    • Статистика и таблицы лидеров
    • Монетизация (IAP-верификация)
// Пример REST-запроса для загрузки конфига
public IEnumerator LoadGameConfig()
{
    using UnityWebRequest request = UnityWebRequest.Get("https://api.game.com/config");
    yield return request.SendWebRequest();
    
    if (request.result == UnityWebRequest.Result.Success)
    {
        GameConfig config = JsonUtility.FromJson<GameConfig>(request.downloadHandler.text);
        ApplyBalanceConfig(config);
    }
}

Критерии выбора и интеграция

Мы использовали гибридный подход, потому что:

  • PUN идеален для быстрого прототипирования и PvP-механик
  • NGO даёт больше контроля и безопасности для важных режимов
  • Кастомные подключения незаменимы для специфичных задач вне геймплея

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

Какие фреймворки сетевых функций использовал на прошлой работе? | PrepBro