MultiplayerAPIExtension¶
继承: MultiplayerAPI < RefCounted < Object
用于扩展MultiplayerAPI的基类。
描述¶
此类可用于通过脚本或扩展扩展或替换默认的MultiplayerAPI实现。
以下示例通过记录正在制作的每个RPC和配置用于复制的每个对象来扩展默认实现(SceneMultiplayer)。
extends MultiplayerAPIExtension
class_name LogMultiplayer
# 扩展默认的 SceneMultiplayer 功能。
var base_multiplayer = SceneMultiplayer.new()
func _init():
# 仅传递基础信号(复制到变量中以避免循环引用)
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()
# 正在创建日志请求,并将其转发至默认的多人应用模式。
func _rpc(peer: int, object: Object, method: StringName, args: Array) -> Error:
print("Got RPC for %d: %s::%s(%s)" % [peer, object, method, args])
return base_multiplayer.rpc(peer, object, method, args)
# 日志配置添加。例如:根路径(空值,节点路径),复制(项目,生成器|同步器),自定义。
func _object_configuration_add(object, config: Variant) -> 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)
# 日志配置删除。例如:根路径(空指针,节点路径),复制(项目,生成器|同步器),自定义。
func _object_configuration_remove(object, config: Variant) -> 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)
# 这些是可选的,但在我们的案例中,我们想要扩展 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 。
# 自动加载.s3
func _enter_tree():
# 将我们的自定义多人应用设置为场景树中的主应用模式。
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()的回调。
Error _rpc(peer: int, object: Object, method: StringName, args: Array) virtual 🔗
void _set_multiplayer_peer(multiplayer_peer: MultiplayerPeer) virtual 🔗