Setup

安裝
- (僅限 Windows) 在解壓縮之前,請先解除封鎖
Photon-Quantum-X.X.X.Plugin-SDK.zip
,方法是right-click > Properties > Unblock
。 - 將壓縮檔解壓縮到 Quantum Unity 專案內或旁邊的資料夾中(Quantum 工具會自動偵測位置)。
|
或 |
|
- (執行本機 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
;
- 新增包含所有模擬程式碼或 Qtn 檔案資料夾的路徑,或使用
- 選擇
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 選單開始一場線上遊戲。

SDK內容
Lib資料夾
Lib 資料夾包含所有編譯和執行 Quantum Photon Server 外掛程式所需的依賴項。
例如,PhotonHivePlugin.dll
是 Photon Server 外掛程式的通用介面。Quantum.Deterministic.Plugin.dll
、Quantum.Deterministic.Server.dll
和Quantum.Deterministic.Server.Interface.dll
是 Quantum 外掛程式的主要程式庫。Quantum.Deterministic.dll
和Quantum.Log.dll
通常會被自訂模擬建置(來自 Unity)的函式庫取代。
Photon.Server資料夾
此資料夾包含本機 Photon 伺服器。bin
資料夾中有 Photon.Server 的可執行檔,LoadBalancing
和NameServer
包含伺服器程式碼,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 啟動。

在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));
}
DotNetSessionRunner
是ISessionRunner
介面的簡單實作,允許 Quantum 模擬在 Unity 外部執行。
QuantumJsonSerializer
用於序列化和反序列化AssetDB。
來自伺服器模擬的事件和回調
可以從自訂外掛程式中對事件(在模擬程式碼中定義和觸發)和回調做出反應。
這可以透過從DotNetSessionRunner
取得EventDispatcher
和CallbackDispatcher
,並訂閱所需的事件和回調來實現。
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