Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
MultiplayerAPIExtension
Наследует: MultiplayerAPI < RefCounted < Object
Базовый класс, используемый для расширения MultiplayerAPI.
Описание
Этот класс можно использовать для расширения или замены реализации по умолчанию MultiplayerAPI с помощью скрипта или расширений.
Следующий пример расширяет реализацию по умолчанию (SceneMultiplayer), регистрируя каждый выполненный RPC и каждый объект, настроенный для репликации.
extends MultiplayerAPIExtension
class_name LogMultiplayer
# Мы хотим расширить стандартный SceneMultiplayer.
var base_multiplayer = SceneMultiplayer.new()
func _init():
# Просто пропускаются базовые сигналы (скопированные в var, чтобы избежать циклических ссылок)
var cts = connected_to_server
var cf = connection_failed
var sd = server_disconnected
var pc = peer_connected
var pd = peer_disconnected
base_multiplayer.connected_to_server.connect(func(): cts.emit())
base_multiplayer.connection_failed.connect(func(): cf.emit())
base_multiplayer.server_disconnected.connect(func(): sd.emit())
base_multiplayer.peer_connected.connect(func(id): pc.emit(id))
base_multiplayer.peer_disconnected.connect(func(id): pd.emit(id))
func _poll():
return base_multiplayer.poll()
# Регистрируйте выполняемые RPC-запросы и пересылайте их в многопользовательскую игру по умолчанию.
func _rpc(peer: int, object: Object, method: StringName, args: Array) -> Error:
print("Получил RPC для %d: %s::%s(%s)" % [peer, object, method, args])
return base_multiplayer.rpc(peer, object, method, args)
# Добавление конфигурации журнала. Например, корневой путь (nullptr, NodePath), репликация (Node, Spawner|Synchronizer), пользовательский.
func _object_configuration_add(object, config: Variant) -> Error:
if config is MultiplayerSynchronizer:
print("Добавление конфигурации синхронизации для %s. Синхронизатор: %s" % [object, config])
elif config is MultiplayerSpawner:
print("Добавление узла %s в список появления. Spawner: %s" % [object, config])
return base_multiplayer.object_configuration_add(object, config)
# Удаление конфигурации журнала. Например, корневой путь (nullptr, NodePath), репликация (Node, Spawner|Synchronizer), настраиваемый.
func _object_configuration_remove(object, config: Variant) -> Error:
if config is MultiplayerSynchronizer:
print("Удаление конфигурации синхронизации для %s. Синхронизатор: %s" % [object, config])
elif config is MultiplayerSpawner:
print("Удаление узла %s из списка появления. Spawner: %s" % [object, config])
return base_multiplayer.object_configuration_remove(object, config)
# Они могут быть необязательными, но в нашем случае мы хотим расширить SceneMultiplayer, поэтому пересылаем все.
func _set_multiplayer_peer(p_peer: MultiplayerPeer):
base_multiplayer.multiplayer_peer = p_peer
func _get_multiplayer_peer() -> MultiplayerPeer:
return base_multiplayer.multiplayer_peer
func _get_unique_id() -> int:
return base_multiplayer.get_unique_id()
func _get_remote_sender_id() -> int:
return base_multiplayer.get_remote_sender_id()
func _get_peer_ids() -> PackedInt32Array:
return base_multiplayer.get_peers()
Затем в вашей основной сцене или в автозагрузке вызовите SceneTree.set_multiplayer(), чтобы начать использовать ваш пользовательский MultiplayerAPI:
# autoload.gd
func _enter_tree():
# Устанавливает наш пользовательский многопользовательский режим в качестве основного в SceneTree.
get_tree().set_multiplayer(LogMultiplayer.new())
Собственные расширения могут также использовать метод MultiplayerAPI.set_default_interface() во время инициализации, чтобы настроить себя в качестве реализации по умолчанию.
Методы
_get_multiplayer_peer() virtual |
|
_get_peer_ids() virtual const |
|
_get_remote_sender_id() virtual const |
|
_get_unique_id() virtual const |
|
_object_configuration_add(object: Object, configuration: Variant) virtual |
|
_object_configuration_remove(object: Object, configuration: Variant) virtual |
|
_poll() virtual |
|
_rpc(peer: int, object: Object, method: StringName, args: Array) virtual |
|
void |
_set_multiplayer_peer(multiplayer_peer: MultiplayerPeer) virtual |
Описания метода
MultiplayerPeer _get_multiplayer_peer() virtual 🔗
Вызывается при извлечении MultiplayerAPI.multiplayer_peer.
PackedInt32Array _get_peer_ids() virtual const 🔗
Обратный вызов для MultiplayerAPI.get_peers().
int _get_remote_sender_id() virtual const 🔗
Обратный вызов для MultiplayerAPI.get_remote_sender_id().
int _get_unique_id() virtual const 🔗
Обратный вызов для MultiplayerAPI.get_unique_id().
Error _object_configuration_add(object: Object, configuration: Variant) virtual 🔗
Обратный вызов для MultiplayerAPI.object_configuration_add().
Error _object_configuration_remove(object: Object, configuration: Variant) virtual 🔗
Обратный вызов для MultiplayerAPI.object_configuration_remove().
Обратный вызов для MultiplayerAPI.poll().
Error _rpc(peer: int, object: Object, method: StringName, args: Array) virtual 🔗
Обратный вызов для MultiplayerAPI.rpc().
void _set_multiplayer_peer(multiplayer_peer: MultiplayerPeer) virtual 🔗
Вызывается, когда установлен MultiplayerAPI.multiplayer_peer.