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) -> Помилка:
print("Отримано RPC для %d: %s::%s(%s)" % [peer, object, method, args])
return base_multiplayer.rpc(peer, object, method, args)
# Записати конфігурацію додавання. Наприклад, кореневий шлях (nullptr, NodePath), реплікація (Node, Spawner|Synchronizer), custom.
func _object_configuration_add(object, config: Variant) -> Помилка:
if config is MultiplayerSynchronizer:
print("Додавання конфігурації синхронізації для %s. Синхронізатор: %s" % [object, config])
elif config is MultiplayerSpawner:
print("Додавання вузла %s до списку спавнів. Спавнер: %s" % [object, config])
return base_multiplayer.object_configuration_add(object, config)
# Записати видалення конфігурації. Наприклад, кореневий шлях (nullptr, NodePath), реплікація (Node, Spawner|Synchronizer), custom.
func _object_configuration_remove(object, config: Variant) -> Помилка:
if config is MultiplayerSynchronizer:
print("Видалення конфігурації синхронізації для %s. Синхронізатор: %s" % [object, config])
elif config is MultiplayerSpawner:
print("Видалення вузла %s зі списку спавнів. Спавнер: %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 |
|
PackedInt32Array |
_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.