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...
MultiplayerAPI
繼承: RefCounted < Object
被繼承: MultiplayerAPIExtension, SceneMultiplayer
高階多人遊戲 API 介面。
說明
用於高級多人遊戲 API 實作的基底類別。另請參閱 MultiplayerPeer。
預設情況下,SceneTree 引用了這個類的一個實作,並使用它來提供跨整個場景的多人遊戲功能(即 RPC)。
可以通過呼叫 SceneTree.set_multiplayer() 方法,覆蓋特定樹分支使用的 MultiplayerAPI 實例,從而有效地允許在同一場景中同時運作使用者端和伺服器。
也可以通過腳本或本地擴充來擴充或替換預設實作。有關擴充的詳細資訊,請參閱 MultiplayerAPIExtension;有關預設實作的詳細資訊,請參閱 SceneMultiplayer。
屬性
方法
create_default_interface() static |
|
get_default_interface() static |
|
object_configuration_add(object: Object, configuration: Variant) |
|
object_configuration_remove(object: Object, configuration: Variant) |
|
poll() |
|
rpc(peer: int, object: Object, method: StringName, arguments: Array = []) |
|
void |
set_default_interface(interface_name: StringName) static |
訊號
connected_to_server() 🔗
當此 MultiplayerAPI 的 multiplayer_peer 成功連接到伺服器時發出。僅在使用者端上發出。
connection_failed() 🔗
當此 MultiplayerAPI 的 multiplayer_peer 無法與伺服器建立連接時發出。僅在使用者端上發出。
當此 MultiplayerAPI 的 multiplayer_peer 與新對等體連接時發出。ID 為新對等體的對等體 ID。當某個使用者端連接到同一伺服器時,其他使用者端會收到通知。連接到伺服器時,該使用者端也會收到此訊號,新對等體為伺服器(ID 為 1)。
當此 MultiplayerAPI 的 multiplayer_peer 與對等體斷開連接時發出。當某個使用者端從同一伺服器斷開連接時,其他使用者端會收到通知。
server_disconnected() 🔗
當此 MultiplayerAPI 的 multiplayer_peer 與伺服器斷開連接時發出。僅在使用者端上發出。
列舉
enum RPCMode: 🔗
RPCMode RPC_MODE_DISABLED = 0
在 Node.rpc_config() 中使用,可以為所有 RPC 呼叫禁用某個方法或屬性,使其不可用。所有方法的預設值。
RPCMode RPC_MODE_ANY_PEER = 1
在 Node.rpc_config() 中使用,可以將某個方法設定為能夠被任何對等體遠程呼叫。類似於 @rpc("any_peer") 注解。接受來自所有遠端對等體的調用,無論是否為節點的控制者。
RPCMode RPC_MODE_AUTHORITY = 2
在 Node.rpc_config() 中使用,可以將某個方法設定為僅能夠被目前的多人控制者遠端呼叫(預設為伺服器)。類似於 @rpc("authority") 注解。見 Node.set_multiplayer_authority()。
屬性說明
MultiplayerPeer multiplayer_peer 🔗
void set_multiplayer_peer(value: MultiplayerPeer)
MultiplayerPeer get_multiplayer_peer()
處理 RPC 系統的對等體物件(設定後會啟用網路)。根據對等體本身的不同,該 MultiplayerAPI 可能會成為網路伺服器(使用 is_server() 判斷)並將根節點的網路模式設定為控制者,也可能會成為普通的使用者端對等體。所有子節點預設會繼承其網路模式。網路相關事件(連接、斷開連接、新使用者端)的處理是通過連接 MultiplayerAPI 的訊號來完成的。
方法說明
MultiplayerAPI create_default_interface() static 🔗
返回預設 MultiplayerAPI 的新實例。
StringName get_default_interface() static 🔗
返回預設的 MultiplayerAPI 實作類別名稱稱。SceneMultiplayer 可用時通常為 "SceneMultiplayer"。見 set_default_interface()。
PackedInt32Array get_peers() 🔗
返回這個 MultiplayerAPI 的 multiplayer_peer 所有已連接對等體的對等體 ID。
Returns the sender's peer ID for the RPC currently being executed.
Note: This method returns 0 when called outside of an RPC. As such, the original peer ID may be lost when code execution is delayed (such as with GDScript's await keyword).
返回這個 MultiplayerAPI 的 multiplayer_peer 唯一對等體 ID。
如果設定了 multiplayer_peer,則返回 true。
如果這個 MultiplayerAPI 的 multiplayer_peer 有效,且處於伺服器模式(監聽連接),則返回 true。
Error object_configuration_add(object: Object, configuration: Variant) 🔗
通知該 MultiplayerAPI,以新增用於給定 object 的新的 configuration。該方法在內部被 SceneTree 使用,以配置該 MultiplayerAPI 的根路徑(傳入 null 並將一個有效的 NodePath 作為 configuration)。該方法可以進一步被 MultiplayerAPI 實作使用,以提供其他功能,有關如何使用它的詳細資訊,請參閱具體實作(例如 SceneMultiplayer)。
注意:當通過 MultiplayerAPIExtension 擴充或重寫 MultiplayerAPI 行為時,該方法最相關。
Error object_configuration_remove(object: Object, configuration: Variant) 🔗
通知該 MultiplayerAPI,以移除用於給定 object 的 configuration。該方法在內部被 SceneTree 使用,以配置該 MultiplayerAPI 的根路徑(傳入 null 並將一個空的 NodePath 作為 configuration)。該方法可以進一步被 MultiplayerAPI 實作使用,以提供其他功能,有關如何使用它的詳細資訊,請參閱具體實作(例如 SceneMultiplayer)。
注意:當通過 MultiplayerAPIExtension 擴充或重寫 MultiplayerAPI 行為時,該方法最相關。
用於輪詢 MultiplayerAPI 的方法。將 SceneTree.multiplayer_poll 設定為 false 時才需要關心。預設情況下,SceneTree 將為你輪詢其 MultiplayerAPI。
注意:該方法會導致 RPC 被呼叫,因此它們將在該函式的相同本文中執行(例如 _process、physics、Thread)。
Error rpc(peer: int, object: Object, method: StringName, arguments: Array = []) 🔗
Sends an RPC to the target peer. The given method will be called on the remote object with the provided arguments. The RPC may also be called locally depending on the implementation and RPC configuration. See Node.rpc() and Node.rpc_config().
Note: Prefer using Node.rpc(), Node.rpc_id(), or my_method.rpc(peer, arg1, arg2, ...) (in GDScript), since they are faster. This method is mostly useful in conjunction with MultiplayerAPIExtension when extending or replacing the multiplayer capabilities.
void set_default_interface(interface_name: StringName) static 🔗
設定預設的 MultiplayerAPI 實作類。模組和擴充可以使用這個方法來配置引擎啟動時 SceneTree 將使用哪個實作。