This document is about: FUSION 2
SWITCH TO

Regions

Photon Cloud透過在不同地區託管伺服器,在全球範圍內提供低延遲遊戲。

客戶端從我們的Photon名稱伺服器獲取地區清單。在專案的生命週期中,可能會增加新的地區,也可能會棄用和刪除舊的地區。

每個地區都與其他地區完全分開,由主伺服器(用於對戰配對)和遊戲伺服器(託管房間)組成。

Photon Cloud Regions' Connect Flows
連線到Photon Cloud地區

可用地區清單因產品而異(Fusion、Quantum、Chat等)。
使用地區允許清單,您可以定義每個AppId可用哪些地區(見下文)。

以下是本產品的地區清單。

可用地區

Photon Cloud由多個地區的伺服器組成,分佈在世界各地的多個託管中心。
一些地區伺服器只支援特定的產品和客戶端SDK。這意味著,例如,Fusion客戶端可以使用日本地區,但Chat不能。

每個Photon Cloud地區都由一個「地區權杖」標識,該標識是一個不區分大小寫的短字串。
例如,「EU」或「eu」都被接受,並指稱相同的歐洲地區。

地區託管於權杖
亞洲新加坡asia
澳洲雪梨au
加拿大東部蒙特婁cae
中國大陸(參見指引)上海cn
歐洲阿姆斯特丹eu
香港香港hk
印度清奈in
日本東京jp
南美聖保羅sa
韓國首爾kr
土耳其伊斯坦堡tr
阿聯酋杜拜uae
美國東部華盛頓特區us
美國西部聖荷西usw
美國中南部達拉斯ussc

行業圈有這些Fusion地區:

地區託管於權杖
亞洲新加坡asia
歐洲阿姆斯特丹eu
印度清奈in
日本東京jp
韓國首爾kr
美國東部華盛頓特區us

地區允許清單

地區允許清單允許您直接從儀表板自訂每個應用程式的可用地區。使用最佳區域功能的客戶端將自動調整適應。

透過使用更多或更少的地區,您可以平衡服務品質(當有一個靠近玩家的地區時,往返時間會更好)和對戰配對體驗(更少的地區意味著每個地區有更多的玩家)。

要定義每個應用程式的地區,請打開儀表板,針對所選應用程式按一下「管理」,然後按一下「編輯允許清單」。
您將找到一個輸入欄位,用於輸入允許的地區清單,如下所示:

  • 上面列出了每個SDK的可用地區,有時也為行業圈單獨列出。
  • 允許清單必須是由分號分隔的地區權杖字串。例如"eu;us"。
  • 地區權杖不區分大小寫。
  • 未定義或無法識別的地區權杖將從清單中忽略。
  • 空("")或格式錯誤的字串(例如";;;")表示允許所有可用地區。

在更改(確認並儲存)後10分鐘內,名稱伺服器將向連線的客戶端發送篩選後的清單。
為避免客戶端衝突,請透過ping連線到「最佳地區」,或確保選擇與地區清單一起收到的區域。

注意:更改流行的應用程式的可用地區將影響多個地區的峰值CCU,這是訂閱費的基礎。根據需要調整訂閱計畫,以避免更昂貴的超額費用。當切換穩定下來時,減少訂閱是完全可以的。

如何選擇地區

如果連線到Photon Cloud US地區,則美國用戶的延遲最低。簡單易懂。


但是,如果您有 來自世界各地 的用戶呢?

選項有..

  • a) 讓遊戲客戶端ping不同的Photon Cloud區域,並預先選擇ping效果最好的區域,請閱讀我們的方法
  • b) 分發綁定到某個地區的客戶端組建,因此來自不同區域的用戶連線到不同的Photon Cloud地區或
  • c) 讓用戶從您的遊戲的UI中選擇一個匹配的地區。
  • d) 如果您的遊戲可以接受更高的延遲,請讓所有用戶連線到同一地區。

所有Photon Cloud應用程式都可以在所有可用地區運行,無需任何額外費用。

參見價格。

Photon Cloud的儀表板允許您監控每個地區的遊戲使用情況,並輕鬆升級或降級您的訂閱計畫。

前往您的儀表板。

最佳地區考量因素

"Best Region" option is not deterministic.
Sometimes it may be "random" due to little variations or exact same ping calculations.

Theoretically, you could:

  • have the same exact ping to multiple regions from the same device. So its random, if you end up with different regions on clients connected to the same network.
  • different ping values for the same region on different devices (or different retries on the same device) connected to the same network.

For instance, in the case of "us" and "usw" (or "ru" and "rue"), you could either make use of the online regions whitelist to select the ones you want and drop the others or connect to an explicit region.

如何在運行階段選擇地區

預設下,如果在PhotonAppSettings上或透過程式碼都沒有設定地區,Fusion將嘗試連接到Best Region
這意味著在啟動過程中,它將ping所有可用地區,並連接到ping值最低的地區。
請記住,Best Region不是確定性的,有時由於變化很小或ping計算完全相同,它可能是「隨機的」。

如果不需要Best Region功能,可以讓玩家在運行階段選擇連接到哪個地區。
如果玩家連接到一個共同的地區,或者只是想與在特定地區玩遊戲的朋友一同加入遊戲階段,這可以幫助降低玩家之間的ping值。

為了獲取可用地區的清單,Fusion提供了NetworkRunner.GetAvailableRegions()方法。
它返回一個Fusion.RegionInfo物件,其中包含地區的名稱和ping值。這可用於按最低ping對清單進行排序,或讓玩家選擇所需的地區。

只有當NetworkRunner 運行時,才能進行地區選擇,因為當它已經連接到特定地區時,這是無法更改的。
在以下程式碼片段中,展示了NetworkRunner如何在運行階段使用自訂地區:

C#

public class FusionInit : MonoBehaviour {

    // ...

    // Start a NetworkRunner with a Game Mode and connect to the specified Region
    public Task<StartGameResult> StartSimulation(NetworkRunner runner, GameMode gameMode, string region) {

        var appSettings = BuildCustomAppSetting(region);

        return runner.StartGame(new StartGameArgs() {
            // ...
            GameMode = gameMode,
            CustomPhotonAppSettings = appSettings
        });
    }

    private FusionAppSettings BuildCustomAppSetting(string region, string customAppID = null, string appVersion = "1.0.0") {

        var appSettings = PhotonAppSettings.Global.AppSettings.GetCopy();;

        appSettings.UseNameServer = true;
        appSettings.AppVersion = appVersion;

        if (string.IsNullOrEmpty(customAppID) == false) {
            appSettings.AppIdFusion = customAppID;
        }

        if (string.IsNullOrEmpty(region) == false) {
            appSettings.FixedRegion = region.ToLower();
        }

        // If the Region is set to China (CN),
        // the Name Server will be automatically changed to the right one
        // appSettings.Server = "ns.photonengine.cn";

        return appSettings;
    }
}

Get Available Regions At Runtime

It is possible to get a list of available regions at runtime using and awaiting the static method NetworkRunner.GetAvailableRegions(),
An example of use is shown below.

C#

public Dropdown Dropdown;
  
private async void RefreshRegionDropdown() {
    _tokenSource = new CancellationTokenSource();
    
    var regions = await NetworkRunner.GetAvailableRegions(cancellationToken: _tokenSource.Token);
    Dropdown.options.Clear();
    Dropdown.AddOptions(regions.Select(reg => $"{reg.RegionCode} = {reg.RegionPing}").ToList());
}

NOTE: A NetworkRunner must exist in the scene.

使用中國大陸地區

您需要為您的Photon應用程式申請存取中國大陸地區向我們發送一封電子郵件,以便我們為您的AppID解鎖它。
在我們的儀表板上,您無法訂閱在中國大陸地區使用的付費計畫。 請透過電子郵件聯繫我們,以獲取任何訂閱的報價:hello@photonengine.com。

Photon名稱伺服器必須位於中國本地,否則防火牆可能會封鎖流量。
中國Photon名稱服務器是「ns.photonengine.cn」。

與中國大陸以外的客戶端連線很可能不會產生好的結果。
此外,從Photon伺服器連線到中國大陸以外的服務器(例如用於自訂身份驗證、WebHooks、WebRPC)可能不可靠。

重要:在當前階段,您透過儀表板對應用程式所做的更改不會自動反映在中國的應用程式緩存中。 如果您有更新請求,請透過電子郵件通知我們。

出於法律原因,您需要為中國單獨組建一個版本,我們建議使用單獨的AppId。
例如,使用編譯條件(由您選擇)而根據組建更改AppId和Photon名稱伺服器。

按照與您的客戶端SDK相對應的說明,為中國市場進行特殊組建。

Fusion

使用PhotonAppSettings

Fusion: PhotonAppSettings for China
Fusion:適用於中國的PhotonAppSettings

使用程式碼

C#

public class FusionInit : MonoBehaviour {

    // ...

    async void ConnectToChina()
    {
        var runner = BuildNetworkRunnerInstance();

        // Start new Runner with the Host Migration Token
        var result = await StartSimulation(
            runner,
            GameMode.AutoHostOrClient, // Or any other GameMode
            "cn" // Select China Region
        );

        // Check results as usual
        if (result.Ok == false) {
            Debug.LogWarning(result.ShutdownReason);
        } else {
            Debug.Log("Done");
        }
    }
}
Back to top