This document is about: QUANTUM 3
SWITCH TO

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預製體並將其拖入你的遊戲場景中。這個預製體是多客戶端運行器的一個示例實現。

Runner Search Screenshot

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

Multi Client Runner

在這個組件中,有幾個可配置的值:

  • DisableOnStart:使用多客戶端運行器時,需要禁用標準遊戲設置中通常包含的Quantum腳本,例如EntityViewUpdaterInputCustomCallbacks。請確保將這些腳本添加到禁用腳本列表中。
  • 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的新實例。

遊玩

設置完成後,你現在就可以使用多客戶端運行器了。

遊戲運行後,你會在遊戲窗口的左上角看到一個菜單。

Runner Runtime Screenshot

這個菜單包含幾個切換按鈕,允許你控制每個本地連接的客戶端:

  • New Client:添加額外的在線客戶端
  • I:切換客戶端的輸入
  • V:切換客戶端的視圖
  • G:切換客戶端的 gizmos
  • X:中斷客戶端的連接

你也可以同時切換多個按鈕來同時控制多個客戶端。

代碼示例

多客戶端運行器的方法也可以通過用戶代碼來控制。

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