This page has not been upgraded to Quantum 3.0 yet. The information may be out of date.
Multi-Client Runner
簡介
Quantum 的多客戶端運行器是一個強大的工具,它允許多個本地玩家在同一個 Quantum 房間中一起遊玩。這個工具對於開發者來說特別實用,他們無需每次都構建遊戲就能測試和調試自己的遊戲。
必要設置
多客戶端運行器需要一些先決條件才能正常運行。
你需要確保具備以下內容:
- 有效的 AppId:你可以通過在 Photon 網站的儀表板上註冊你的遊戲來獲取。
- 正確配置的
Photon Server Settings
。你可以通過導航到遊戲項目中的可編輯物件來調整和檢查這些值。 - 確保
QuantumMultiClientRunner
預製體在你的遊戲場景中。
設置
要開始使用,導航到QuantumMultiClientRunner
預製體並將其拖入你的遊戲場景中。這個預製體是多客戶端運行器的一個示例實現。

將預製體放入遊戲場景後,選擇它並查看QuantumMultiClientRunner
組件。

在這個組件中,有幾個可配置的值:
DisableOnStart
:使用多客戶端運行器時,需要禁用標準遊戲設置中通常包含的Quantum腳本,例如EntityViewUpdater
、Input
和CustomCallbacks
。請確保將這些腳本添加到禁用腳本列表中。EditorSettings
:你可以為第一個客戶端之後的所有額外客戶端提供非默認的編輯器設置。例如,更改 gizmo 顏色。AppSettings
:可選擇提供不同的非默認伺服器應用設置。例如,與默認不同的地區。RuntimeConfig
:可選的自定義運行時配置設置。PlayerCount
:最大玩家數量。InitialPlayerCount
:遊戲開始時的玩家數量。RuntimePlayer[]
:可選的自定義運行時玩家設置。PlayerInputTemplate
:為每個客戶端實例化的玩家輸入模板。這必須包含一個實現了 Unity 消息 / 方法void PollInput(CallbackPollInput c)
的 Unity 腳本。一個正確實現此方法的腳本示例如下:
C#
public void PollInput(CallbackPollInput callback)
{
Quantum.Input i = new Quantum.Input();
var direction = new Vector3();
direction.x = UnityEngine.Input.GetAxisRaw("Horizontal");
direction.y = UnityEngine.Input.GetAxisRaw("Vertical");
i.Jump = UnityEngine.Input.GetKeyDown(KeyCode.Space);
// convert to fixed point.
i.Direction = direction.ToFPVector3();
callback.SetInput(i, DeterministicInputFlags.Repeatable);
}
EntityViewUpdater
:為每個客戶端實例化的可選自定義 EntityViewUpdater 遊戲物件。否則,將為每個客戶端創建默認EntityViewUpdater
的新實例。
遊玩
設置完成後,你現在就可以使用多客戶端運行器了。
遊戲運行後,你會在遊戲窗口的左上角看到一個菜單。

這個菜單包含幾個切換按鈕,允許你控制每個本地連接的客戶端:
New Client
:添加額外的在線客戶端I
:切換客戶端的輸入V
:切換客戶端的視圖G
:切換客戶端的 gizmosX
:中斷客戶端的連接
你也可以同時切換多個按鈕來同時控制多個客戶端。
代碼示例
多客戶端運行器的方法也可以通過用戶代碼來控制。
C#
public void CreateNewLocalClient()
{
var multiclient = FindObjectOfType<QuantumMultiClientRunner>();
// initializes a new local player
multiclient.CreateNewPlayer();
}
public void ShutDownLocalClient()
{
// find the instance you want to shut down
var player = FindObjectOfType<QuantumMultiClientPlayer>();
// stops the local player instance
player.Stop();
}
Back to top