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.

ENetMultiplayerPeer

繼承: MultiplayerPeer < PacketPeer < RefCounted < Object

使用 ENet 庫實作的 MultiplayerPeer。

說明

MultiplayerPeer 的一種實作,應該在初始化為使用者端、伺服器或網格之後傳遞給 MultiplayerAPI.multiplayer_peer。然後就可以通過連接到 MultiplayerAPI 的訊號來處理事件。有關 ENet 庫包裝的更多資訊,請參見 ENetConnection

注意:ENet 僅使用 UDP,不使用 TCP。當你想要將伺服器埠轉發到公共互聯網上以便讓伺服器可以被存取時,只需要轉發 UDP 伺服器埠即可。可以使用 UPNP 類嘗試在啟動伺服器時自動轉發伺服器埠。

教學

屬性

ENetConnection

host

方法

Error

add_mesh_peer(peer_id: int, host: ENetConnection)

Error

create_client(address: String, port: int, channel_count: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0, local_port: int = 0)

Error

create_mesh(unique_id: int)

Error

create_server(port: int, max_clients: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0)

ENetPacketPeer

get_peer(id: int) const

void

set_bind_ip(ip: String)


屬性說明

ENetConnection host 🔗

create_client()create_server() 之後,建立的底層 ENetConnection


方法說明

Error add_mesh_peer(peer_id: int, host: ENetConnection) 🔗

使用給定的 peer_id 新增一個新的遠端對等體,並將其連接到給定的 host

注意:host 必須只有一個處於 ENetPacketPeer.STATE_CONNECTED 狀態的對等體。


Error create_client(address: String, port: int, channel_count: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0, local_port: int = 0) 🔗

建立使用者端,該使用者端使用指定的 port 連接到位於 address 的服務器。給定的位址必須是完全限定的功能變數名稱(例如 "www.example.com"),或 IPv4 或 IPv6 格式的 IP 地址(例如 "192.168.1.1")。port 是伺服器監聽的埠。channel_count 參數可用於指定為連接分配的 ENet 通道數。in_bandwidthout_bandwidth 參數可用於將傳入和傳出頻寬限制為給定的每秒位元組數。預設值 0 表示無限制的頻寬。請注意,ENet 將對在對等體之間的連接的特定端,策略性地丟棄封包,以確保對等體的頻寬不會被淹沒。頻寬參數還決定了連接的視窗大小,它限制了在任何給定時間可能正在傳輸的可靠封包的數量。如果建立了一個使用者端,則返回 @GlobalScope.OK;如果該 ENetMultiplayerPeer 實例已經有一個打開的連接(在這種情況下,需要先呼叫 MultiplayerPeer.close()),則返回 @GlobalScope.ERR_ALREADY_IN_USE;如果不能被建立使用者端,則返回 @GlobalScope.ERR_CANT_CREATE。如果指定了 local_port,使用者端也會監聽給定的埠;這對一些 NAT 穿越技術很有用。


Error create_mesh(unique_id: int) 🔗

在網格網路模式下初始化該 MultiplayerPeer。提供的 unique_id 一旦被分配為 MultiplayerAPI.multiplayer_peer,就將被用作本地對等體的網路唯一 ID。在網格網路配置中,需要在呼叫 add_mesh_peer() 之前,使用 ENetConnection 手動設定每個新的對等體。這種技術更先進,它可以更好地控制連接過程(例如,在處理 NAT 穿透時),並更好地分配網路負載(否則會給伺服器帶來更大的負擔)。


Error create_server(port: int, max_clients: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0) 🔗

建立通過 port 監聽連接的伺服器。該埠需要是一個介於 0 到 65535 之間的可用且未被使用的埠。請注意,低於 1024 的埠是特權埠,可能需要提升權限,具體取決於平臺。要更改伺服器監聽的介面,請使用 set_bind_ip()。默認 IP 是萬用字元 "*",它會監聽所有可用的介面。max_clients 是同時允許的最大使用者端數,可以使用最大可達 4095 的任何數位,儘管可實作的同時使用者端數可能要低得多,並且取決於套用程式。有關頻寬參數的其他詳細信息,請參閱 create_client()。如果伺服器被建立,則返回 @GlobalScope.OK;如果該 ENetMultiplayerPeer 實例已經有一個打開的連接(在這種情況下,需要先調用 MultiplayerPeer.close()),則返回 @GlobalScope.ERR_ALREADY_IN_USE;如果伺服器不能被建立,則返回 @GlobalScope.ERR_CANT_CREATE


ENetPacketPeer get_peer(id: int) const 🔗

返回與給定 id 關聯的 ENetPacketPeer


void set_bind_ip(ip: String) 🔗

建立伺服器時使用的 IP。預設情況下,這被設定為萬用字元 "*",它綁定到所有可用的介面。給定的 IP 位址格式需要是 IPv4 或 IPv6,例如:"192.168.1.1"