MultiplayerAPI
高级多人游戏API。
描述
该类实现了高阶多人游戏API背后的大部分逻辑。参阅NetworkedMultiplayerPeer。
默认情况下,SceneTree有对该类的引用,用于在整个场景中提供多人游戏功能(即RPC/RSET)。
通过设置Node.custom_multiplayer属性,可以重写特定节点使用的多人游戏API实例,从而有效地允许在同一场景中同时运行客户端和服务器。
注意: 高阶的多人游戏API协议实现细节,并不意味着可以被非Godot服务器使用。它可能会改变,不做另行通知。
属性
| ||
| ||
方法
void | clear ( ) |
get_network_connected_peers ( ) const | |
get_network_unique_id ( ) const | |
get_rpc_sender_id ( ) const | |
has_network_peer ( ) const | |
is_network_server ( ) const | |
void | poll ( ) |
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与一个同伴断开连接时触发该信号。当其他客户端与同一服务器断开连接时,客户端会得到通知。
- network_peer_packet ( int id, PoolByteArray packet )
当这个MultiplayerAPI的network_peer收到一个带有自定义数据的数据包
(见send_bytes)时触发。ID是发送该数据包的对等体的ID。
- server_disconnected ( )
当这个MultiplayerAPI的network_peer与服务器断开连接时触发。只在客户端触发。
枚举
enum RPCMode:
RPC_MODE_DISABLED = 0 —- 与Node.rpc_config或Node.rset_config一起使用,可以在所有RPC调用中禁用某个方法或属性,使其不可用。所有方法的默认值。
RPC_MODE_REMOTE = 1 —- 与Node.rpc_config或Node.rset_config一起使用,用于设置只在远程端调用某个方法或改变某个属性,而不是在本地。类似于
remote
关键字。所有远程对等体的调用和属性改变都被接受,不管它们是节点的主控还是傀儡。RPC_MODE_MASTER = 2 —- 与 Node.rpc_config 或 Node.rset_config 一起用于设置要调用的方法或仅在此节点的网络主机上更改的属性。类似于
master
关键字。仅接受节点网络傀儡的方法调用或属性更改,请参阅Node.set_network_master。RPC_MODE_PUPPET = 3 —- 与 Node.rpc_config 或 Node.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 |
|
Setter | set_allow_object_decoding(value) |
Getter | is_object_decoding_allowed() |
如果true
,或者如果network_peer的PacketPeer.allow_object_decoding设置为true
,多人游戏API将允许在RPC/RSETs期间的对象进行编码和解码。
警告: 反序列化的对象可能包含会被执行的代码。如果序列化的对象来自不受信任的来源,请不要使用这个选项,以避免潜在的安全威胁,如远程代码执行。
- NetworkedMultiplayerPeer network_peer
Setter | set_network_peer(value) |
Getter | get_network_peer() |
处理 RPC 系统的对等对象(设置后有效地启用网络)。根据对等体本身,MultiplayerAPI 将成为网络服务器(检查 is_network_server)并将根节点的网络模式设置为 master,或者它将成为根节点设置为 puppet 的常规对等体。所有子节点默认设置为继承网络模式。与网络相关的事件(连接、断开连接、新客户端)的处理是通过连接到 MultiplayerAPI 的信号来完成的。
- bool refuse_new_network_connections
Default |
|
Setter | set_refuse_new_network_connections(value) |
Getter | is_refusing_new_network_connections() |
如果true
,则MultiplayerAPI的network_peer会拒绝新的传入连接。
- Node root_node
Setter | set_root_node(value) |
Getter | get_root_node() |
用于RPC的根节点。不使用绝对路径,而是使用相对路径来寻找应该执行RPC的节点。
这有效地允许场景树的不同分支由不同的MultiplayerAPI管理,例如允许在同一个场景中同时运行客户端和服务器。
方法说明
- void clear ( )
清除当前的MultiplayerAPI网络状态(除非你知道自己在做什么,否则不应该调用这个)。
- PoolIntArray get_network_connected_peers ( ) const
返回此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)。
- Error send_bytes ( PoolByteArray bytes, int id=0, TransferMode mode=2 )
将给定的原始字节
发送到由id
确定的特定对等体(见NetworkedMultiplayerPeer.set_target_peer)。默认ID是0
,即向所有对等体广播。