MultiplayerAPI

Inherits: Reference < Object

高级多人游戏API。

描述

该类实现了高阶多人游戏API背后的大部分逻辑。参阅NetworkedMultiplayerPeer

默认情况下,SceneTree有对该类的引用,用于在整个场景中提供多人游戏功能(即RPC/RSET)。

通过设置Node.custom_multiplayer属性,可以重写特定节点使用的多人游戏API实例,从而有效地允许在同一场景中同时运行客户端和服务器。

注意: 高阶的多人游戏API协议实现细节,并不意味着可以被非Godot服务器使用。它可能会改变,不做另行通知。

属性

bool

allow_object_decoding

false

NetworkedMultiplayerPeer

network_peer

bool

refuse_new_network_connections

false

Node

root_node

方法

void

clear ( )

PoolIntArray

get_network_connected_peers ( ) const

int

get_network_unique_id ( ) const

int

get_rpc_sender_id ( ) const

bool

has_network_peer ( ) const

bool

is_network_server ( ) const

void

poll ( )

Error

send_bytes ( PoolByteArray bytes, int id=0, TransferMode mode=2 )

信号

  • connected_to_server ( )

当这个MultiplayerAPI的network_peer成功连接到一个服务器时触发该信号。这只在客户端触发。


  • connection_failed ( )

当这个MultiplayerAPI的network_peer无法与服务器建立连接时触发。只在客户端触发。


  • network_peer_connected ( int id )

当此多人播放器的 network_peer 与新对等连接时触发该信号。ID 是新peer的 peer ID。当其他客户端连接到同一服务器时,客户端会收到通知。连接到服务器后,客户端还会收到服务器的此信号(ID 为 1)。


  • network_peer_disconnected ( int id )

当这个MultiplayerAPI的network_peer与一个同伴断开连接时触发该信号。当其他客户端与同一服务器断开连接时,客户端会得到通知。


当这个MultiplayerAPI的network_peer收到一个带有自定义数据的数据包(见send_bytes)时触发。ID是发送该数据包的对等体的ID。


  • server_disconnected ( )

当这个MultiplayerAPI的network_peer与服务器断开连接时触发。只在客户端触发。

枚举

enum RPCMode:

  • RPC_MODE_DISABLED = 0 —- 与Node.rpc_configNode.rset_config一起使用,可以在所有RPC调用中禁用某个方法或属性,使其不可用。所有方法的默认值。

  • RPC_MODE_REMOTE = 1 —- 与Node.rpc_configNode.rset_config一起使用,用于设置只在远程端调用某个方法或改变某个属性,而不是在本地。类似于remote关键字。所有远程对等体的调用和属性改变都被接受,不管它们是节点的主控还是傀儡。

  • RPC_MODE_MASTER = 2 —- 与 Node.rpc_configNode.rset_config 一起用于设置要调用的方法或仅在此节点的网络主机上更改的属性。类似于 master 关键字。仅接受节点网络傀儡的方法调用或属性更改,请参阅Node.set_network_master

  • RPC_MODE_PUPPET = 3 —- 与 Node.rpc_configNode.rset_config 一起使用,以设置仅在此节点的傀儡上调用的方法或改变的属性。类似于 puppet 关键字。只接受来自节点的网络主站的调用或属性更改,见Node.set_network_master

  • RPC_MODE_SLAVE = 3 —- 已废弃。 使用RPC_MODE_PUPPET代替。类似于slave关键字。

  • RPC_MODE_REMOTESYNC = 4 —- 行为类似于RPC_MODE_REMOTE,但也会使调用或属性在本地改变。类似于remoteesync关键字。

  • RPC_MODE_SYNC = 4 —- 已废弃。 使用RPC_MODE_REMOTESYNC代替。类似于sync关键字。

  • RPC_MODE_MASTERSYNC = 5 —- 类似于RPC_MODE_MASTER,但也使方法调用或属性改变本地。类似于 mastersync 关键字。

  • RPC_MODE_PUPPETSYNC = 6 —- 行为类似于 RPC_MODE_PUPPET,但也会使调用或属性在本地改变。类似于 puppetsync 关键字。

属性说明

  • bool allow_object_decoding

Default

false

Setter

set_allow_object_decoding(value)

Getter

is_object_decoding_allowed()

如果true,或者如果network_peerPacketPeer.allow_object_decoding设置为true,多人游戏API将允许在RPC/RSETs期间的对象进行编码和解码。

警告: 反序列化的对象可能包含会被执行的代码。如果序列化的对象来自不受信任的来源,请不要使用这个选项,以避免潜在的安全威胁,如远程代码执行。


Setter

set_network_peer(value)

Getter

get_network_peer()

处理 RPC 系统的对等对象(设置后有效地启用网络)。根据对等体本身,MultiplayerAPI 将成为网络服务器(检查 is_network_server)并将根节点的网络模式设置为 master,或者它将成为根节点设置为 puppet 的常规对等体。所有子节点默认设置为继承网络模式。与网络相关的事件(连接、断开连接、新客户端)的处理是通过连接到 MultiplayerAPI 的信号来完成的。


  • bool refuse_new_network_connections

Default

false

Setter

set_refuse_new_network_connections(value)

Getter

is_refusing_new_network_connections()

如果true,则MultiplayerAPI的network_peer会拒绝新的传入连接。


Setter

set_root_node(value)

Getter

get_root_node()

用于RPC的根节点。不使用绝对路径,而是使用相对路径来寻找应该执行RPC的节点。

这有效地允许场景树的不同分支由不同的MultiplayerAPI管理,例如允许在同一个场景中同时运行客户端和服务器。

方法说明

  • void clear ( )

清除当前的MultiplayerAPI网络状态(除非你知道自己在做什么,否则不应该调用这个)。


返回此MultiplayerAPI的network_peer的所有连接的对等体的ID。


  • int get_network_unique_id ( ) const

返回该多人游戏API的network_peer的唯一对等体ID。


  • int get_rpc_sender_id ( ) const

返回当前正在执行的RPC的发送方的对等体ID。

注意: 如果不在RPC内,这个方法将返回0。


  • bool has_network_peer ( ) const

如果有一个network_peer设置,返回true


  • bool is_network_server ( ) const

如果这个MultiplayerAPI的network_peer处于服务器模式(监听连接),返回true


  • void poll ( )

用于轮询多人游戏API的方法。只有当你使用Node.custom_multiplayer覆盖或者你将SceneTree.multiplayer_poll设置为false时,你才需要担心这个问题。默认情况下,SceneTree将为你轮询其多人游戏API。

注意:这个方法导致RPC和RSET被调用,所以它们将在这个函数的同一上下文中执行(例如,_process, physics, Thread)。


将给定的原始字节发送到由id确定的特定对等体(见NetworkedMultiplayerPeer.set_target_peer)。默认ID是0,即向所有对等体广播。