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...
MultiplayerPeer¶
继承: PacketPeer < RefCounted < Object
派生: ENetMultiplayerPeer, MultiplayerPeerExtension, OfflineMultiplayerPeer, WebRTCMultiplayerPeer, WebSocketMultiplayerPeer
特化 PacketPeer 的抽象类,MultiplayerAPI 会用到。
描述¶
管理与一个或多个作为服务器或客户端的远程对等体的连接,并为每个对等体分配唯一的 ID。另请参阅 MultiplayerAPI。
注意:MultiplayerAPI 协议是一个实现细节,并不打算由非 Godot 服务器使用。它可能会更改,恕不另行通知。
注意:当导出到 Android 时,在导出项目或使用一键部署之前,确保在 Android 导出预设中启用了 INTERNET
权限。否则,任何类型的网络通信都会被安卓阻止。
教程¶
属性¶
|
||
|
||
|
方法¶
void |
close ( ) |
void |
disconnect_peer ( int peer, bool force=false ) |
generate_unique_id ( ) const |
|
get_connection_status ( ) const |
|
get_packet_channel ( ) const |
|
get_packet_mode ( ) const |
|
get_packet_peer ( ) const |
|
get_unique_id ( ) const |
|
is_server_relay_supported ( ) const |
|
void |
poll ( ) |
void |
set_target_peer ( int id ) |
信号¶
peer_connected ( int id )
远程对等体连接时发出。
peer_disconnected ( int id )
远程对等体断开连接时发出。
枚举¶
enum ConnectionStatus:
ConnectionStatus CONNECTION_DISCONNECTED = 0
该 MultiplayerPeer 已断开连接。
ConnectionStatus CONNECTION_CONNECTING = 1
该 MultiplayerPeer 正在连接到服务器。
ConnectionStatus CONNECTION_CONNECTED = 2
该 MultiplayerPeer 已连接。
enum TransferMode:
TransferMode TRANSFER_MODE_UNRELIABLE = 0
数据包不被确认,对丢失的数据包不进行重发尝试。数据包可以以任何顺序到达。可能比 TRANSFER_MODE_UNRELIABLE_ORDERED 快。用于非关键数据,并注意考虑顺序是否重要。
TransferMode TRANSFER_MODE_UNRELIABLE_ORDERED = 1
数据包不被确认,对丢失的数据包不进行重发尝试。数据包按其发送顺序接收。有可能比 TRANSFER_MODE_RELIABLE 快。用于非关键数据或由于重发尝试而迟迟不能收到的数据,例如运动和位置数据。
TransferMode TRANSFER_MODE_RELIABLE = 2
数据包必须被接收,并应进行重发尝试,直到数据包被确认。数据包必须按照其发送的顺序接收。最可靠的传输模式,但由于开销很大,可能是最慢的。用于必须按顺序传输和到达的关键数据,例如触发的能力或聊天信息。仔细考虑信息是否真的是关键的,并尽量少用。
常量¶
TARGET_PEER_BROADCAST = 0
将数据包发送至所有已连接的对等体。
TARGET_PEER_SERVER = 1
将数据包发送至作为服务器的远程对等体。
属性说明¶
bool refuse_new_connections = false
如果为 true
,则这个 MultiplayerPeer 拒绝新的连接。
int transfer_channel = 0
用于发送数据包的通道。许多网络 API,例如 ENet 和 WebRTC,允许创建多个独立的通道,这些通道的行为在某种程度上类似于单独的连接。这意味着可靠数据只会阻止该通道上其他数据包的传递,并且排序将仅与正在发送数据包的通道有关。使用不同的通道发送不同且独立的状态更新,是优化快节奏游戏的网络使用和减少延迟的常用方法。
注意:默认通道(0
)实际上作为 3 个独立的通道工作(每种 TransferMode 一个),因此默认情况下,TRANSFER_MODE_RELIABLE 和 TRANSFER_MODE_UNRELIABLE_ORDERED 不会相互交互。请参阅特定的网络 API 文档(例如 ENet 或 WebRTC),以了解如何正确地设置通道。
TransferMode transfer_mode = 2
void set_transfer_mode ( TransferMode value )
TransferMode get_transfer_mode ( )
向目标对等体发送数据包的方式。请参阅 TransferMode 和 set_target_peer 方法。
方法说明¶
void close ( )
立即关闭多人对等体,返回到 CONNECTION_DISCONNECTED 状态。已连接的对等体将被丢弃,不会发出 peer_disconnected。
void disconnect_peer ( int peer, bool force=false )
断开给定的 peer
与该主机的连接。如果 force
为 true
,则不会为该对等体发出 peer_disconnected 信号。
int generate_unique_id ( ) const
返回随机生成的整数,可用作网络唯一 ID。
ConnectionStatus get_connection_status ( ) const
返回连接的当前状态。见 ConnectionStatus。
int get_packet_channel ( ) const
返回下一个可用数据包被接收使用的通道。请参阅 PacketPeer.get_available_packet_count。
TransferMode get_packet_mode ( ) const
返回用于发送下一个可用数据包的远程对等体的 TransferMode。请参阅 PacketPeer.get_available_packet_count。
int get_packet_peer ( ) const
返回发送下一个可用数据包的 MultiplayerPeer 的 ID。见 PacketPeer.get_available_packet_count。
int get_unique_id ( ) const
返回该 MultiplayerPeer 的 ID。
bool is_server_relay_supported ( ) const
如果服务器在当前配置中可以充当中继者,则返回 true(也就是说,如果更高级别的 MultiplayerAPI 应该通知连接的客户端有其他对等体,并实现一个中继协议以允许它们之间的通信)。
void poll ( )
等待最多 1 秒以接收一个新的网络事件。
void set_target_peer ( int id )
设置数据包将被发送至的对等体。
id
可以是以下之一:TARGET_PEER_BROADCAST,以发送到所有连接的对等体;TARGET_PEER_SERVER,以发送到充当服务器的对等体;一个有效的对等体 ID ,以发送到那个特定的对等体;一个负的对等体 ID,以发送到除那个对等体以外的所有对等体。默认情况下,目标对等体是 TARGET_PEER_BROADCAST。