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。
© 版权所有 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.