This document is about: QUANTUM 3
SWITCH TO

Setup


Available in the Gaming Circle and Industries Circle
Circle

安裝

  1. (僅限 Windows) 在解壓縮之前,請先解除封鎖Photon-Quantum-X.X.X.Plugin-SDK.zip,方法是right-click > Properties > Unblock
  2. 將壓縮檔解壓縮到 Quantum Unity 專案內或旁邊的資料夾中(Quantum 工具會自動偵測位置)。

MyQuantumProject
├─Assets
├─Library
├─..
└─PluginSDK
    

MyQuantumProject
├─Assets
├─Library
└─..
PluginSDK
    
  1. (執行本機 Photon Server)Photon儀表板下載並複製 Photon Server 授權檔案到Photon.Server/deploy_win/bin
    附註: 只有 Circle 會員的 擁有者 可以存取授權檔案。

測試伺服器外掛程式

  • 在 Visual Studio 或 Rider 中開啟Quantum.Plugin.Custom.sln,將Quantum.Plugin.Custom.Stock設為啟動專案,並忽略其他專案可能提交編譯的問題;
  • 按下 F5 啟動 Photon-Server;
  • 開啟位於Photon.Server\deploy_win\log\GSGame.log的遊戲伺服器日誌檔案;
  • 開啟 Unity 專案,選擇PhotonServerSettings.asset並點擊Local Name Server按鈕;
  • 使用 Quantum 選單開始一場線上遊戲。

測試伺服器模擬

  • 在 Unity 中選擇並設定QuantumDotnetProjectSettings資產:
    • 新增包含所有模擬程式碼或 Qtn 檔案資料夾的路徑,或使用QuantumDotNetInclude Unity 資產標籤標記這些資料夾;
    • 例如,模擬資料夾可能是Assets\Photon\QuantumAsteroids\Simulation
  • 選擇QuantumDotnetBuildSettings資產並點擊Detect Plugin SDK。如果失敗,請手動設定包含Photon.Server資料夾的資料夾;
  • 選擇QuantumDotnetBuildSettings資產並點擊Sync Plugin SDK Server Simulation。此步驟會建置非 Unity 模擬的 dll,匯出 Quantum Unity 資料庫並複製 LUT 檔案:
    • 程式庫到Lib資料夾;
    • 資產到Photon.Server\deploy_win\Plugins\QuantumPlugin3.0\bin\assets
  • 在 Visual Studio 或 Rider 中開啟Quantum.Plugin.Custom.sln
    • Quantum.Plugin.Custom.Sample.ServerSimulation專案設為啟動專案;
    • 按下 F5 啟動 Photon-Server;
    • 開啟位於Photon.Server\deploy_win\log\GSGame.log的遊戲伺服器日誌檔案;
  • 開啟 Unity 專案,選擇PhotonServerSettings.asset並點擊Local Name Server按鈕;
  • 在選擇PhotonServerSettings.asset時,將Auth Mode更改為Auth Once
  • 使用 Quantum 選單開始一場線上遊戲。
Auth Once

SDK內容

Lib資料夾

Lib 資料夾包含所有編譯和執行 Quantum Photon Server 外掛程式所需的依賴項。
例如,PhotonHivePlugin.dll是 Photon Server 外掛程式的通用介面。Quantum.Deterministic.Plugin.dllQuantum.Deterministic.Server.dllQuantum.Deterministic.Server.Interface.dll是 Quantum 外掛程式的主要程式庫。Quantum.Deterministic.dllQuantum.Log.dll通常會被自訂模擬建置(來自 Unity)的函式庫取代。

Photon.Server資料夾

此資料夾包含本機 Photon 伺服器。bin資料夾中有 Photon.Server 的可執行檔,LoadBalancingNameServer包含伺服器程式碼,Plugins則包含伺服器外掛程式。log資料夾包含伺服器日誌(例如遊戲伺服器日誌GSGame.log)。

外掛程式設定檔案LoadBalancing\GameServer\bin\plugin.config包含本機設定的鍵值儲存,線上伺服器會從 Photon 儀表板取得這些設定。

自訂外掛程式函式庫會輸出到Plugins\QuantumPlugin3.0\bin。這也是最終上傳到 Photon Enterprise 雲端的資料夾。

Quantum.Plugin.Custom.*資料夾

這些資料夾包含 Quantum 外掛程式的範例專案(請見下一節)。

外掛程式範例

Quantum.Plugin.Custom.sln包含多個範例專案。選擇其中一個作為啟動專案,即可透過 F5 啟動。

Selecting a Project

launchSettings.json中可以看到 F5 會啟動 Photon Server:

共享的 csproj 檔案Quantum.Plugin.Shared.csproj.include用於每個專案中,以支援基本整合任務,例如:

  • 將輸出複製到目標資料夾:Photon.Server\Plugins\QuantumPlugin3.0\bin;
  • 壓縮外掛程式以準備上傳到Photon Cloud;
  • 檢查授權檔案。

Stock範例

此範例是一個空白模板,僅包含一個自訂的DeterministicPluginFactory,負責實例化所需的DeterministicPlugin。它只會實例化未修改的基礎外掛程式物件。

C#

public override DeterministicPlugin CreateDeterministicPlugin(IPluginHost gameHost, String pluginName, Dictionary<String, String> config, IPluginLogger logger, ref String errorMsg) {
  return new DeterministicPlugin();
}

HTTP範例

在某些情況下,您可能需要查詢外部服務以獲取資訊或執行某些操作(例如給予玩家帳號獎勵)。

此範例是比 Stock 外掛程式稍微進階的版本。它包含一個自訂的DeterministicPluginFactory和一個名為QuantumCustomServer的自訂DeterministicServer。此類別覆寫了一些基礎外掛程式方法以新增自訂行為(在此範例中是 HTTP 調用)。

自訂伺服器使用HTTPExample類別對公共 API 執行簡單的 HTTP GET 請求。HTTPExample類別是 PluginHost 的 HTTP 調用的簡單封裝。

C#

HttpExample.SendAsync(host, result => {
    if (result) {
        Log.Info("HTTP Asyncronous Response: Success");
    } else {
        Log.Info("HTTP Asyncronous Response: FAILED");
    }
});

伺服器模擬範例

此範例與 Stock 範例相同,但包含伺服器模擬功能。

為了實現這一點,建立的DeterministicServer實例在其建構函式中還提供了一個DotNetSessionRunner

要編譯此專案,必須先完成 測試伺服器模擬 部分的所有步驟。

C#

public override DeterministicPlugin CreateDeterministicPlugin(IPluginHost gameHost, String pluginName, Dictionary<String, String> config, IPluginLogger logger, ref String errorMsg) {
  var sessionRunner = new DotNetSessionRunner {
    AssetSerializer = new QuantumJsonSerializer()
  };

  return new DeterministicPlugin(new DeterministicServer(sessionRunner));
}

DotNetSessionRunnerISessionRunner介面的簡單實作,允許 Quantum 模擬在 Unity 外部執行。

QuantumJsonSerializer用於序列化和反序列化AssetDB。

來自伺服器模擬的事件和回調

可以從自訂外掛程式中對事件(在模擬程式碼中定義和觸發)和回調做出反應。

這可以透過從DotNetSessionRunner取得EventDispatcherCallbackDispatcher,並訂閱所需的事件和回調來實現。

C#

private void SubscribeToEvents(DotNetSessionRunner sessionRunner) {
    var eventDispatcher = (EventDispatcher)sessionRunner.EventDispatcher;

    eventDispatcher.Subscribe<EventFoo>(this, OnEventFoo);
}

private void OnEventFoo(EventFoo foo) {
    // Do something with the event
}

C#

private void SubscribeToCallbacks(DotNetSessionRunner sessionRunner) {
    var callbackDispatcher = (CallbackDispatcher)sessionRunner.CallbackDispatcher;

    callbackDispatcher.Subscribe<CallbackGameStarted>(this, c => Log.Info("Game Started"));
}

延伸閱讀

Quantum 自訂外掛程式基於 Photon-Server V5,並遵循 Photon Server 文件中描述的工作流程。深入閱讀以下文件以獲取更多資訊:Photon-Server V5手冊

要將外掛程式上傳到 Photon Enterprise 雲端,以下教學很有幫助:企業外掛程式設定

Back to top