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 ( int id ) | |
void | disconnect_peer ( int id ) |
send_auth ( int id, PackedByteArray data ) | |
send_bytes ( PackedByteArray bytes, int id=0, TransferMode mode=2, int channel=0 ) |
信号
peer_authenticating ( int id )
当此 MultiplayerAPI 的 MultiplayerAPI.multiplayer_peer 连接到一个新对等体并设置有效的 auth_callback 时,将发出此信号。在这种情况下,只有在调用 complete_auth 并传递给定的对等体 id
时,才会发出 MultiplayerAPI.peer_connected。在此状态下,该对等体不会包含在 MultiplayerAPI.get_peers 返回的列表中(但会包含在 get_authenticating_peers 返回的列表中),且只会发送和接收身份验证数据。有关发送身份验证数据的信息,请参阅 send_auth。
peer_authentication_failed ( int id )
当这个 MultiplayerAPI 的 MultiplayerAPI.multiplayer_peer 与另一个尚未完成授权的对等体断开连接时触发。见 peer_authenticating。
peer_packet ( int id, PackedByteArray packet )
当这个 MultiplayerAPI 的 MultiplayerAPI.multiplayer_peer 收到带有自定义数据(见 send_bytes)的 packet
时发出。ID 是发送数据包的对等体的对等体 ID。
属性说明
bool allow_object_decoding = false
如果为 true
,则 MultiplayerAPI 将允许在远程过程调用期间对对象进行编码和解码。
警告:反序列化的对象可能包含要执行的代码。如果序列化的对象来自不受信任的来源,请勿使用此选项,以避免潜在的安全威胁,例如远程代码执行。
Callable auth_callback = Callable()
当通过 send_auth 接收身份验证数据时要执行的回调函数。如果 Callable 为空(默认),对等方将在连接后立即自动接受。
float auth_timeout = 3.0
如果将其设置为大于 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 管理,例如允许在同一场景中,同时运行客户端和服务器。
bool server_relay = true
启用或禁用服务器功能,该功能通知客户端其他对等体的连接/断开,并在它们之间转发消息。当此选项为 false
时,客户端将不会自动收到其他对等体的通知,也无法通过服务器向它们发送数据包。
注意:在其他对等体连接时更改此选项可能会导致意外行为。
注意:对该功能的支持可能取决于当前的 MultiplayerPeer 配置。请参阅 MultiplayerPeer.is_server_relay_supported。
方法说明
void clear ( )
清除当前 SceneMultiplayer 的网络状态(除非你知道你在做什么,否则不应该调用这个函数)。
Error complete_auth ( int id )
完成对由 id
标识的远程对等体的身份验证步骤。远程端也完成身份验证之后,将会为这个对等体发出 MultiplayerAPI.peer_connected 信号。不会再从此对等体接收到身份验证消息。
如果对等体在完成身份验证之前断开连接,无论是由于网络问题、auth_timeout 过期还是手动调用 disconnect_peer,都会发出 peer_authentication_failed 信号,而不是 MultiplayerAPI.peer_disconnected 信号。
void disconnect_peer ( int id )
断开由 id
标识的对等体的连接,将其从连接的对等体列表中移除,并关闭与它的底层连接。
PackedInt32Array get_authenticating_peers ( )
返回当前尝试使用此 MultiplayerAPI 进行身份验证的对等方的 ID。
Error send_auth ( int id, PackedByteArray data )
将指定的 data
作为身份验证消息的一部分发送到由 id
标识的远程对等方。这可用于验证对等方,并控制何时发出 MultiplayerAPI.peer_connected(并接受远程对等方作为连接的对等方之一)。
Error send_bytes ( PackedByteArray bytes, int id=0, TransferMode mode=2, int channel=0 )
向由 id
标识的特定对等体发送给定的原始字节 bytes
(见 MultiplayerPeer.set_target_peer)。默认 ID 为 0
,即广播到所有对等体。
© 版权所有 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0). Revision b1c660f7
.
Built with Sphinx using a theme provided by Read the Docs.