SceneMultiplayer

Наследует: MultiplayerAPI < RefCounted < Object

Реализация API многопользовательской игры высокого уровня.

Описание

Этот класс является реализацией MultiplayerAPI по умолчанию, используемой для предоставления многопользовательских функций в Godot Engine.

Эта реализация поддерживает RPC через Node.rpc() и Node.rpc_id() и требует, чтобы MultiplayerAPI.rpc() был передан в Node (для других типов объектов это не сработает).

Эта реализация дополнительно обеспечивает репликацию SceneTree через узлы MultiplayerSpawner и MultiplayerSynchronizer, а также ресурс SceneReplicationConfig.

Примечание: Протокол API многопользовательской игры высокого уровня является деталью реализации и не предназначен для использования серверами, отличными от Godot. Он может измениться без уведомления.

Примечание: При экспорте в Android обязательно включите разрешение INTERNET в предустановке экспорта Android перед экспортом проекта или использованием развертывания в один клик. В противном случае Android будет блокировать любые виды сетевого взаимодействия.

Свойства

bool

allow_object_decoding

false

Callable

auth_callback

Callable()

float

auth_timeout

3.0

int

max_delta_packet_size

65535

int

max_sync_packet_size

1350

bool

refuse_new_connections

false

NodePath

root_path

NodePath("")

bool

server_relay

true

Методы

void

clear()

Error

complete_auth(id: int)

void

disconnect_peer(id: int)

PackedInt32Array

get_authenticating_peers()

Error

send_auth(id: int, data: PackedByteArray)

Error

send_bytes(bytes: PackedByteArray, id: int = 0, mode: TransferMode = 2, channel: int = 0)


Сигналы

peer_authenticating(id: int) 🔗

Выдается, когда MultiplayerAPI.multiplayer_peer этого MultiplayerAPI подключается к новому одноранговому узлу и установлен допустимый auth_callback. В этом случае MultiplayerAPI.peer_connected не будет выдан, пока не будет вызван complete_auth() с заданным одноранговым узлом id. В этом состоянии одноранговый узел не будет включен в список, возвращаемый MultiplayerAPI.get_peers() (но в тот, который возвращается get_authenticating_peers()), и будут отправлены или получены только данные аутентификации. См. send_auth() для отправки данных аутентификации.


peer_authentication_failed(id: int) 🔗

Выдается, когда MultiplayerAPI.multiplayer_peer этого MultiplayerAPI отключается от однорангового узла, для которого аутентификация еще не завершена. См. peer_authenticating.


peer_packet(id: int, packet: PackedByteArray) 🔗

Вызывается, когда MultiplayerAPI.multiplayer_peer этого MultiplayerAPI получает packet с пользовательскими данными (см. send_bytes()). ID — это идентификатор однорангового узла, отправившего пакет.


Описания свойств

bool allow_object_decoding = false 🔗

  • void set_allow_object_decoding(value: bool)

  • bool is_object_decoding_allowed()

Если true, MultiplayerAPI разрешит кодирование и декодирование объекта во время RPC.

Предупреждение: Десериализованные объекты могут содержать код, который выполняется. Не используйте эту опцию, если сериализованный объект поступает из ненадежных источников, чтобы избежать потенциальной угрозы безопасности, такой как удаленное выполнение кода.


Callable auth_callback = Callable() 🔗

Обратный вызов, выполняемый при получении данных аутентификации, отправленных через send_auth(). Если Callable пуст (по умолчанию), одноранговые узлы будут автоматически приняты, как только они подключатся.


float auth_timeout = 3.0 🔗

  • void set_auth_timeout(value: float)

  • float get_auth_timeout()

Если установлено значение больше 0.0, максимальная продолжительность в секундах, в течение которой одноранговые узлы могут оставаться в состоянии аутентификации, после чего аутентификация автоматически провалится. См. сигналы peer_authenticating и peer_authentication_failed.


int max_delta_packet_size = 65535 🔗

  • void set_max_delta_packet_size(value: int)

  • int get_max_delta_packet_size()

Максимальный размер каждого дельта-пакета. Более высокие значения увеличивают вероятность получения полных обновлений в одном кадре, но также и вероятность перегрузки сети (более высокая задержка, отключения). См. MultiplayerSynchronizer.


int max_sync_packet_size = 1350 🔗

  • void set_max_sync_packet_size(value: int)

  • int get_max_sync_packet_size()

Максимальный размер каждого пакета синхронизации. Более высокие значения увеличивают вероятность получения полных обновлений в одном кадре, но также и вероятность потери пакетов. См. MultiplayerSynchronizer.


bool refuse_new_connections = false 🔗

  • void set_refuse_new_connections(value: bool)

  • bool is_refusing_new_connections()

Если true, MultiplayerAPI.multiplayer_peer MultiplayerAPI отклоняет новые входящие соединения.


NodePath root_path = NodePath("") 🔗

Корневой путь для использования для RPC-ов и репликации. Вместо абсолютного пути будет использоваться относительный путь для поиска узла, на котором должен быть выполнен RPC.

Это фактически позволяет иметь разные ветви дерева сцены, которые будут управляться разными MultiplayerAPI, что позволяет, например, запускать как клиент, так и сервер в одной сцене.


bool server_relay = true 🔗

  • void set_server_relay_enabled(value: bool)

  • bool is_server_relay_enabled()

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

Примечание: Изменение этой опции при подключенных других пирах может привести к неожиданному поведению.

Примечание: Поддержка этой функции может зависеть от текущей конфигурации MultiplayerPeer. См. MultiplayerPeer.is_server_relay_supported().


Описания метода

void clear() 🔗

Очищает текущее состояние сети SceneMultiplayer (вызывать эту функцию следует только в том случае, если вы точно знаете, что делаете).


Error complete_auth(id: int) 🔗

Отметьте шаг аутентификации как завершенный для удаленного однорангового узла, идентифицированного id. Сигнал MultiplayerAPI.peer_connected будет отправлен для этого однорангового узла, как только удаленная сторона также завершит аутентификацию. Дальнейшие сообщения об аутентификации от этого однорангового узла не ожидаются.

Если одноранговый узел отключается до завершения аутентификации из-за проблем с сетью, истечения auth_timeout или ручного вызова disconnect_peer(), вместо MultiplayerAPI.peer_disconnected будет отправлен сигнал peer_authentication_failed.


void disconnect_peer(id: int) 🔗

Отключает одноранговый узел, идентифицированный id, удаляя его из списка подключенных одноранговых узлов и закрывая базовое соединение с ним.


PackedInt32Array get_authenticating_peers() 🔗

Возвращает идентификаторы участников, которые в данный момент пытаются пройти аутентификацию с помощью этого MultiplayerAPI.


Error send_auth(id: int, data: PackedByteArray) 🔗

Отправляет указанные data удаленному пиру, идентифицированному id, как часть сообщения аутентификации. Это может использоваться для аутентификации пиров и управления тем, когда выдается MultiplayerAPI.peer_connected (и удаленный пир принимается как один из подключенных пиров).


Error send_bytes(bytes: PackedByteArray, id: int = 0, mode: TransferMode = 2, channel: int = 0) 🔗

Отправляет заданные необработанные bytes определенному пиру, идентифицированному id (см. MultiplayerPeer.set_target_peer()). Идентификатор по умолчанию — 0, т.е. транслируется всем пирам.