Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты
Важно: UNet — это устаревшее решение, а также новая многопользовательская и сетьсистема Unity, которая обеспечивает многопользовательскую игру. игры через компьютерную сеть. Подробнее
См. в Словарь
Решение (Netcode для GameObjects) находится в разработке. Дополнительную информацию и дальнейшие действия см. на веб-сайте Unity Netcode for GameObjects.

Многие многопользовательские игры могут использовать Диспетчер сетиКомпонент сети, который управляет сетевым состоянием проекта. Подробнее
См. в Словарь
для управления соединениями, но вы также можете использовать низкоуровневые классы NetworkServer и NetworkClient напрямую.

При использовании High-Level API каждая игра должна иметь хост-сервер для подключения. Каждый участник многопользовательской игры может быть одновременно клиентом, выделенным сервером или комбинацией сервера и клиента. Эта комбинированная роль является обычным случаем многопользовательской игры без выделенного сервера.

В многопользовательских играх без выделенного сервера один из игроков, запускающих игру, действует как сервер для этой игры. Экземпляр игры этого игрока запускает «локальный клиент» вместо обычного удаленного клиента. Локальный клиент использует те же самые сценыUnity. Сцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь
и GameObjectsОсновной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь
в качестве сервера и обменивается данными внутри с помощью очередей сообщений вместо отправки сообщения по сети. Для кода и систем HLAPI локальный клиент — это просто еще один клиент, поэтому почти весь пользовательский код одинаков, независимо от того, является ли клиент локальным или удаленным. Это упрощает создание игры, которая работает как в многопользовательском, так и в автономном режиме с одним и тем же кодом.

Общим шаблоном для многопользовательских игр является наличие GameObject, который управляет сетевым состоянием игры. Ниже показано начало сценария NetworkManager. Этот сценарий будет прикреплен к GameObject, который находится в сцене запуска игры. Он имеет простой UI(пользовательский интерфейс). Позволяет пользователю взаимодействовать с вашим приложением. Подробнее
См. в Словарь
и функции управления клавиатурой, которые позволяют запускать игру в разных сетевые режимы. Прежде чем выпустить игру, вы должны создать более визуально привлекательное меню с такими параметрами, как «Начать одиночную игру» и «Начать многопользовательскую игру».

using UnityEngine; using UnityEngine.Networking; public class MyNetworkManager : MonoBehaviour { public bool isAtStartup = true; NetworkClient myClient; void Update () { if (isAtStartup) { if (Input.GetKeyDown(KeyCode.S)) { SetupServer(); } if (Input.GetKeyDown(KeyCode.C)) { SetupClient(); } if (Input.GetKeyDown(KeyCode.B)) { SetupServer(); SetupLocalClient(); } } } void OnGUI() { if (isAtStartup) { GUI.Label(new Rect(2, 10, 150, 100), "Press S for server"); GUI.Label(new Rect(2, 30, 150, 100), "Press B for both"); GUI.Label(new Rect(2, 50, 150, 100), "Press C for client"); } } }

Этот базовый код вызывает функции настройки, чтобы все заработало. Ниже приведены простые функции настройки для каждого из сценариев. Эти функции создают сервер или нужный тип клиента для каждого сценария. Обратите внимание, что удаленный клиент предполагает, что сервер находится на том же компьютере (127.0.0.1). Для готовой игры это может быть интернет-адрес или что-то, предоставленное системой подбора игроков.

// Create a server and listen on a port public void SetupServer() { NetworkServer.Listen(4444); isAtStartup = false; } // Create a client and connect to the server port public void SetupClient() { myClient = new NetworkClient(); myClient.RegisterHandler(MsgType.Connect, OnConnected); myClient.Connect("127.0.0.1", 4444); isAtStartup = false; } // Create a local client and connect to the local server public void SetupLocalClient() { myClient = ClientScene.ConnectLocalServer(); myClient.RegisterHandler(MsgType.Connect, OnConnected); isAtStartup = false; }

Клиенты в этом коде регистрируют функцию обратного вызова для события подключения MsgType.Connect. Это встроенное сообщение HLAPI, которое сценарий вызывает, когда клиент подключается к серверу. В этом случае код обработчика на клиенте:

// client function public void OnConnected(NetworkMessage netMsg) { Debug.Log("Connected to server"); }

Этого достаточно, чтобы запустить многопользовательское приложение. С помощью этого сценария вы можете отправлять сетевые сообщения, используя NetworkClient.Send и NetworkServer.SendToAll. Обратите внимание, что отправка сообщений — это низкоуровневый способ взаимодействия с системой.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3