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...
SceneMultiplayer
继承: MultiplayerAPI < RefCounted < Object
高阶多人游戏 API 实现。
描述
这个类是 MultiplayerAPI 的默认实现,用于在 Godot 引擎中提供多人游戏功能。
该实现通过 Node.rpc() 和 Node.rpc_id() 来支持 RPC,需要向 MultiplayerAPI.rpc() 传递一个 Node(传入其他对象类型会导致失败)。
该实现还提供了 SceneTree 复制功能,使用的是 MultiplayerSpawner 和 MultiplayerSynchronizer 节点,以及 SceneReplicationConfig 资源,。
注意:高阶多人游戏 API 协议属于实现细节,并不打算提供给非 Godot 服务器使用。对协议的更改可能不会进行提前通知。
注意:导出到 Android 时,在导出项目或使用一键部署之前,请务必在安卓导出预设中开启 INTERNET
权限。否则,任何类型的网络通信都将被 Android 阻止。
属性
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
方法
void |
clear() |
complete_auth(id: int) |
|
void |
disconnect_peer(id: int) |
send_auth(id: int, data: PackedByteArray) |
|
send_bytes(bytes: PackedByteArray, id: int = 0, mode: TransferMode = 2, channel: int = 0) |
信号
peer_authenticating(id: int) 🔗
当此 MultiplayerAPI 的 MultiplayerAPI.multiplayer_peer 连接到一个新对等体并设置有效的 auth_callback 时,将发出此信号。在这种情况下,只有在调用 complete_auth() 并传递给定的对等体 id
时,才会发出 MultiplayerAPI.peer_connected。在此状态下,该对等体不会包含在 MultiplayerAPI.get_peers() 返回的列表中(但会包含在 get_authenticating_peers() 返回的列表中),且只会发送和接收身份验证数据。有关发送身份验证数据的信息,请参阅 send_auth()。
peer_authentication_failed(id: int) 🔗
当这个 MultiplayerAPI 的 MultiplayerAPI.multiplayer_peer 与另一个尚未完成授权的对等体断开连接时触发。见 peer_authenticating。
peer_packet(id: int, packet: PackedByteArray) 🔗
当这个 MultiplayerAPI 的 MultiplayerAPI.multiplayer_peer 收到带有自定义数据(见 send_bytes())的 packet
时发出。ID 是发送数据包的对等体的对等体 ID。
属性说明
bool allow_object_decoding = false
🔗
如果为 true
,则 MultiplayerAPI 将允许在远程过程调用期间对对象进行编码和解码。
警告:反序列化的对象可能包含要执行的代码。如果序列化的对象来自不受信任的来源,请勿使用此选项,以避免潜在的安全威胁,例如远程代码执行。
Callable auth_callback = Callable()
🔗
当通过 send_auth() 接收身份验证数据时要执行的回调函数。如果 Callable 为空(默认),对等方将在连接后立即自动接受。
如果将其设置为大于 0.0
的值,则对等方可以停留在正在验证状态的最长时间,单位为秒,之后身份验证将自动失败。见 peer_authenticating 和 peer_authentication_failed 信号。
int max_delta_packet_size = 65535
🔗
增量数据包的最大大小。值越大,单帧能够收到完整更新的几率就越大,但造成网络拥堵的几率也越大(网络延迟、断线等)。见 MultiplayerSynchronizer。
int max_sync_packet_size = 1350
🔗
同步数据包的最大大小。值越大,单帧能够收到完整更新的几率就越大,但丢包的几率也越大。见 MultiplayerSynchronizer。
bool refuse_new_connections = false
🔗
如果为 true
,则 MultiplayerAPI 的 MultiplayerAPI.multiplayer_peer 将拒绝新的传入连接。
NodePath root_path = NodePath("")
🔗
用于 RPC 和复制的根路径。将使用相对路径,而不是绝对路径,来查找 RPC 应该在其上被执行的节点。
这有效地允许场景树的不同分支,由不同的 MultiplayerAPI 管理,例如允许在同一场景中,同时运行客户端和服务器。
启用或禁用服务器功能,该功能通知客户端其他对等体的连接/断开,并在它们之间转发消息。当此选项为 false
时,客户端将不会自动收到其他对等体的通知,也无法通过服务器向它们发送数据包。
注意:在其他对等体连接时更改此选项可能会导致意外行为。
注意:对该功能的支持可能取决于当前的 MultiplayerPeer 配置。请参阅 MultiplayerPeer.is_server_relay_supported()。
方法说明
void clear() 🔗
清除当前 SceneMultiplayer 的网络状态(不清楚有什么用就别调用)。
Error complete_auth(id: int) 🔗
完成对由 id
标识的远程对等体的身份验证步骤。远程端也完成身份验证之后,将会为这个对等体发出 MultiplayerAPI.peer_connected 信号。不会再从此对等体接收到身份验证消息。
如果对等体在完成身份验证之前断开连接,无论是由于网络问题、auth_timeout 过期还是手动调用 disconnect_peer(),都会发出 peer_authentication_failed 信号,而不是 MultiplayerAPI.peer_disconnected 信号。
void disconnect_peer(id: int) 🔗
断开由 id
标识的对等体的连接,将其从连接的对等体列表中移除,并关闭与它的底层连接。
PackedInt32Array get_authenticating_peers() 🔗
返回当前尝试使用此 MultiplayerAPI 进行身份验证的对等方的 ID。
Error send_auth(id: int, data: PackedByteArray) 🔗
将指定的 data
作为身份验证消息的一部分发送到由 id
标识的远程对等方。这可用于验证对等方,并控制何时发出 MultiplayerAPI.peer_connected(并接受远程对等方作为连接的对等方之一)。
Error send_bytes(bytes: PackedByteArray, id: int = 0, mode: TransferMode = 2, channel: int = 0) 🔗
向由 id
标识的特定对等体发送给定的原始字节 bytes
(见 MultiplayerPeer.set_target_peer())。默认 ID 为 0
,即广播到所有对等体。