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 实现。
下面的例子通过记录每一个正在进行的 RPC 和为复制而配置的每一个对象,增强了默认的实现(SceneMultiplayer)。
extends MultiplayerAPIExtension
class_name LogMultiplayer
# 我们想增强默认的 SceneMultiplayer。
var base_multiplayer = SceneMultiplayer.new()
func _init():
# 仅传递基本信号(复制到 var 以避免循环引用)
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))
func _poll():
return base_multiplayer.poll()
# 记录正在进行的 RPC 并将其转发到默认的多人游戏。
func _rpc(peer: int, object: Object, method: StringName, args: Array) -> Error:
print("获取用于 %d 的 RPC:%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 添加到出生列表。出生器:%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 从出生列表移除。出生器:%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_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, 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 |
方法说明¶
MultiplayerPeer _get_multiplayer_peer ( ) virtual
在检索到 MultiplayerAPI.multiplayer_peer 时调用。
PackedInt32Array _get_peer_ids ( ) virtual const
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, Variant configuration ) virtual
MultiplayerAPI.object_configuration_add 的回调。
Error _object_configuration_remove ( Object object, Variant configuration ) virtual
MultiplayerAPI.object_configuration_remove 的回调。
Error _poll ( ) virtual
MultiplayerAPI.poll 的回调。
Error _rpc ( int peer, Object object, StringName method, Array args ) virtual
MultiplayerAPI.rpc 的回调。
void _set_multiplayer_peer ( MultiplayerPeer multiplayer_peer ) virtual
在设置 MultiplayerAPI.multiplayer_peer 时调用。