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(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()
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 與該主機的連接。如果 force 為 true,則不會為該對等體發出 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().
返回發送下一個可用封包的 MultiplayerPeer 的 ID。見 PacketPeer.get_available_packet_count()。
返回該 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。