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¶
Inherits: MultiplayerAPI < RefCounted < Object
Base class used for extending the MultiplayerAPI.
描述¶
This class can be used to augment or replace the default MultiplayerAPI implementation via script or extensions.
The following example augment the default implementation (SceneMultiplayer) by logging every RPC being made, and every object being configured for replication.
extends MultiplayerAPIExtension
class_name LogMultiplayer
# We want to augment the default SceneMultiplayer.
var base_multiplayer = SceneMultiplayer.new()
func _init():
# Just passthourgh base signals (copied to var to avoid cyclic reference)
var cts = connected_to_server
var cf = connection_failed
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.peer_connected.connect(func(id): pc.emit(id))
base_multiplayer.peer_disconnected.connect(func(id): pd.emit(id))
# Log RPC being made and forward it to the default multiplayer.
func _rpc(peer: int, object: Object, method: StringName, args: Array) -> int: # Error
print("Got RPC for %d: %s::%s(%s)" % [peer, object, method, args])
return base_multiplayer.rpc(peer, object, method, args)
# Log configuration add. E.g. root path (nullptr, NodePath), replication (Node, Spawner|Synchronizer), custom.
func _object_configuration_add(object, config: Variant) -> int: # Error
if config is MultiplayerSynchronizer:
print("Adding synchronization configuration for %s. Synchronizer: %s" % [object, config])
elif config is MultiplayerSpawner:
print("Adding node %s to the spawn list. Spawner: %s" % [object, config])
return base_multiplayer.object_configuration_add(object, config)
# Log configuration remove. E.g. root path (nullptr, NodePath), replication (Node, Spawner|Synchronizer), custom.
func _object_configuration_remove(object, config: Variant) -> int: # Error
if config is MultiplayerSynchronizer:
print("Removing synchronization configuration for %s. Synchronizer: %s" % [object, config])
elif config is MultiplayerSpawner:
print("Removing node %s from the spawn list. Spawner: %s" % [object, config])
return base_multiplayer.object_configuration_remove(object, config)
# These can be optional, but in our case we want to augment SceneMultiplayer, so forward everything.
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_peer_ids() -> PackedInt32Array:
return base_multiplayer.get_peers()
Then in your main scene or in an autoload call SceneTree.set_multiplayer to start using your custom MultiplayerAPI:
# autoload.gd
func _enter_tree():
# Sets our custom multiplayer as the main one in SceneTree.
get_tree().set_multiplayer(LogMultiplayer.new())
Native extensions can alternatively use the MultiplayerAPI.set_default_interface method during initialization to configure themselves as the default implementation.
Methods¶
_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, Variant configuration ) virtual |
|
_object_configuration_remove ( Object object, Variant configuration ) virtual |
|
_poll ( ) virtual |
|
_rpc ( int peer, Object object, StringName method, Array args ) virtual |
|
void |
_set_multiplayer_peer ( MultiplayerPeer multiplayer_peer ) virtual |
Method Descriptions¶
MultiplayerPeer _get_multiplayer_peer ( ) virtual
Called when the MultiplayerAPI.multiplayer_peer is retrieved.
PackedInt32Array _get_peer_ids ( ) virtual const
Callback for MultiplayerAPI.get_peers.
int _get_remote_sender_id ( ) virtual const
Callback for MultiplayerAPI.get_remote_sender_id.
int _get_unique_id ( ) virtual const
Callback for MultiplayerAPI.get_unique_id.
Error _object_configuration_add ( Object object, Variant configuration ) virtual
Callback for MultiplayerAPI.object_configuration_add.
Error _object_configuration_remove ( Object object, Variant configuration ) virtual
Callback for MultiplayerAPI.object_configuration_remove.
Error _poll ( ) virtual
Callback for MultiplayerAPI.poll.
Error _rpc ( int peer, Object object, StringName method, Array args ) virtual
Callback for MultiplayerAPI.rpc.
void _set_multiplayer_peer ( MultiplayerPeer multiplayer_peer ) virtual
Called when the MultiplayerAPI.multiplayer_peer is set.