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.

MultiplayerPeer

繼承: PacketPeer < RefCounted < Object

被繼承: ENetMultiplayerPeer, MultiplayerPeerExtension, OfflineMultiplayerPeer, WebRTCMultiplayerPeer, WebSocketMultiplayerPeer

特化 PacketPeer 的抽象類別,MultiplayerAPI 會用到。

說明

管理與一個或多個作為伺服器或使用者端的遠端對等體的連接,並為每個對等體分配唯一的 ID。另請參閱 MultiplayerAPI

注意:MultiplayerAPI 協議是一個實作細節,並不打算由非 Godot 伺服器使用。它可能會更改,恕不另行通知。

注意:當匯出到 Android 時,在匯出專案或使用一鍵部署之前,確保在 Android 匯出預設中啟用了 INTERNET 許可權。否則,任何型別的網路通信都會被安卓阻止。

教學

屬性

bool

refuse_new_connections

false

int

transfer_channel

0

TransferMode

transfer_mode

2

方法

void

close()

void

disconnect_peer(peer: int, force: bool = false)

int

generate_unique_id() const

ConnectionStatus

get_connection_status() const

int

get_packet_channel() const

TransferMode

get_packet_mode() const

int

get_packet_peer() const

int

get_unique_id() const

bool

is_server_relay_supported() const

void

poll()

void

set_target_peer(id: int)


訊號

peer_connected(id: int) 🔗

遠端對等體連接時發出。


peer_disconnected(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 🔗

  • void set_refuse_new_connections(value: bool)

  • bool is_refusing_new_connections()

如果為 true,則這個 MultiplayerPeer 拒絕新的連接。


int transfer_channel = 0 🔗

  • void set_transfer_channel(value: int)

  • int get_transfer_channel()

用於發送封包的通道。許多網路 API,例如 ENet 和 WebRTC,允許建立多個獨立的通道,這些通道的行為在某種程度上類似於單獨的連接。這意味著可靠資料只會阻止該通道上其他封包的傳遞,並且排序將僅與正在發送封包的通道有關。使用不同的通道發送不同且獨立的狀態更新,是優化快節奏遊戲的網路使用和減少延遲的常用方法。

注意:預設通道(0)實際上作為 3 個獨立的通道工作(每種 TransferMode 一個),因此預設情況下,TRANSFER_MODE_RELIABLETRANSFER_MODE_UNRELIABLE_ORDERED 不會相互互動。請參閱特定的網路 API 文件(例如 ENet 或 WebRTC),以瞭解如何正確地設置通道。


TransferMode transfer_mode = 2 🔗

The manner in which to send packets to the target peer. See the set_target_peer() method.


方法說明

void close() 🔗

立即關閉多人對等體,返回到 CONNECTION_DISCONNECTED 狀態。已連接的對等體將被丟棄,不會發出 peer_disconnected


void disconnect_peer(peer: int, force: bool = false) 🔗

斷開給定的 peer 與該主機的連接。如果 forcetrue,則不會為該對等體發出 peer_disconnected 訊號。


int generate_unique_id() const 🔗

返回隨機生成的整數,可用作網路唯一 ID。


ConnectionStatus get_connection_status() const 🔗

Returns the current state of the connection.


int get_packet_channel() const 🔗

返回下一個可用封包被接收使用的通道。請參閱 PacketPeer.get_available_packet_count()


TransferMode get_packet_mode() const 🔗

Returns the transfer mode the remote peer used to send the next available packet. See 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 🔗

Returns true if the server can act as a relay in the current configuration. That is, if the higher level MultiplayerAPI should notify connected clients of other peers, and implement a relay protocol to allow communication between them.


void poll() 🔗

等待最多 1 秒以接收一個新的網路事件。


void set_target_peer(id: int) 🔗

設定封包將被發送至的對等體。

id 可以是以下之一:TARGET_PEER_BROADCAST,以發送到所有連接的對等體;TARGET_PEER_SERVER,以發送到充當伺服器的對等體;一個有效的對等體 ID ,以發送到那個特定的對等體;一個負的對等體 ID,以發送到除那個對等體以外的所有對等體。預設情況下,目標對等體是 TARGET_PEER_BROADCAST