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