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。