This document is about: QUANTUM 3
SWITCH TO

リージョン

Photon Cloudは、様々なリージョンでサーバーをホストすることで、世界中で低遅延のゲームを実現します。

クライアントは、Photonネームサーバーからリージョンのリストを取得できます。プロジェクトの運用期間を通じて、新しいリージョンが追加されたり、古いリージョンが廃止・削除されたりする可能性があります。

{% if Chat %}
各リージョンは完全に独立していて、バックエンドサーバーとフロントエンドサーバーで構成されます。
{% endif %}
{% if PUN Realtime Voice Quantum Fusion Bolt %}
各リージョンは完全に独立していて、マスターサーバー(マッチメイキング用)とゲームサーバー(ルームのホスト)で構成されます。

クライアントのワークフローの概略は以下の通りです。

(1) クライアントは、Photonネームサーバーから利用可能なリージョンのリストを取得する。

(2) 利用可能なリージョンの中から一つを選択(pingに基づいて自動で選択/プレイヤーが手動で選択)して、そのリージョンのマスターサーバーに接続します。マスターサーバーはマッチメイキングを担当し、同じリージョンのゲームサーバー上のルームの作成/参加を行います。

(3) 最後に、クライアントはルームに参加するために特定のゲームサーバーへ接続します。このゲームサーバーは、(2)でクライアントが接続したマスターサーバーと同じリージョンにあります。

Photon Cloud Regions' Connect Flows
Photon Cloudリージョンへの接続
{% endif %}

リージョン許可リストによって、AppIdごとに利用可能なリージョンを定義できます(後述)。

利用可能なリージョン

Photon Cloudは、複数のリージョンのサーバーで構成されており、世界中のホスティングセンターに分散しています。

Photon Cloudの各リージョンは「リージョンコード」で識別され、大文字小文字を区別しない短い文字列です。
例えば、「EU」「eu」はどちらも有効で、同じヨーロッパリージョンを指します。

ホスティングセンターの場所と、各リージョンのリージョンコードを、以下のリストに示します。

Photon Cloud for Gaming

Photon製品のQuantum・Fusion・Voice・Realtime・PUNは、Gaming向けのPhoton Cloudの以下のリージョンを利用可能です。

リージョン場所コード
アジアシンガポールasia
オーストラリアシドニーau
東カナダモントリオールcae
中国本土 (こちらをご覧ください)上海cn
ヨーロッパアムステルダムeu
香港香港hk
インドチェンナイin
日本東京jp
南アフリカヨハネスブルグza
南アメリカサンパウロsa
韓国ソウルkr
トルコイスタンブールtr
アラブ首長国連邦ドバイuae
東アメリカワシントンD.C.us
西アメリカサンノゼusw
中南米ダラスussc

Photon Chatは、以下のリージョンを利用可能です。

リージョン場所コード
アジアシンガポールasia
ヨーロッパアムステルダムeu
東アメリカワシントンD.C.us
中国本土(こちらをご覧ください)上海cn

Photon Industries Premium Cloud

Photon製品のQuantum・Fusion・Voice・Realtime・PUNは、Industries向けのPremium Cloudの以下のリージョンを利用可能です。

リージョン場所コード
アジアシンガポールasia
オーストラリアシドニーau
ヨーロッパアムステルダムeu
インドチェンナイin
日本東京jp
南アフリカヨハネスブルグza
南アメリカサンパウロsa
韓国ソウルkr
東アメリカワシントンD.C.us
西アメリカサンノゼusw

Photon Chatは、以下のリージョンを利用可能です。

リージョン場所コード
東アメリカワシントンD.C.us

中国リージョンのGaming/Industries

中国本土リージョンのPhoton Cloudを使用するには特別な条件があります。

  • アクセス解除が必要(後述
  • 中国でPhoton Voiceは利用不可
  • 開発用20CCUは無料(非商用)
  • Photon Cloudは500CCUのサブスクリプションのみが利用可能
  • それ以上のセットアップには特別な同意が必要

Photon製品のQuantum・Fusion・Voice・Realtime・PUN・Chatは、以下のリージョンのPhoton Cloudを利用可能です。

リージョン場所コード
中国本土上海cn

リージョン許可リスト

リージョン許可リストによって、アプリケーションごとにダッシュボードから有効なリージョンを編集できます。ベストリージョン機能を使用するクライアントは、自動的にそれに適応します。

リージョンの増減によって、サービス品質(プレイヤーに近いリージョンがある場合は、応答時間が改善する)と、マッチメイキング体験(リージョンを減らせば、リージョンごとのプレイヤー数が増える)のバランスを調整できます。

アプリごとに利用可能なリージョンを定義するには、ダッシュボードを開き、アプリケーションの「詳細へ」をクリックし、リージョン許可リストの「編集」をクリックしてください。
すると、許可するリージョンのリストを入力できる入力欄が表示されます。

  • 有効なリージョンはSDKごとに定義されていて、Industries Circleでは異なることがあります
  • 許可リストは、セミコロンで区切られたリージョントークンの文字列(例:"eu;us")です
  • リージョンコードは、大文字と小文字を区別しません
  • 定義されていない/認識できないリージョンコードは、リストから無視されます
  • 空("")または不正な文字列(例:";;;")は、全ての利用可能なリージョンが許可されます

変更(入力後に保存)してから10分以内に、ネームサーバーはフィルタリングされたリストを接続中のクライアントに送信するようになります。
クライアント側とのコンフリクトを避けるため、最小Pingの「ベストリージョン」に接続するか、受信したリージョンリストからリージョンを選択するようにしてください。

備考:人気のあるアプリで利用可能なリージョンを変更すると、複数のリージョンのピークCCUに影響し、利用料金にも影響します。必要に応じてプランを調整して、高額な追加料金を避けてください。プランのダウングレードは、切り替えが落ち着いた時に行うと良いでしょう。

リージョンの選択方法

アメリカにいるユーザーは、Photon Cloud USリージョンに接続すれば、レイテンシは最小になります。それだけなら簡単です。


では、世界中にユーザーがいる場合はどうすれば良いでしょう?

その場合は、以下のいずれかを選択できます。

  • a) 様々なPhoton Cloudリージョンにpingを送信し、最適なリージョンをあらかじめクライアントに選択させる(こちらをご覧ください)
  • b) リージョンごとのビルドを配布して、異なる地域のユーザーを異なるPhoton Cloudリージョンに接続させる
  • c) ゲームのUI内で、リージョンをユーザーに選択させる
  • d) 高レイテンシが許容されるゲーム(それほどリアルタイムではないゲーム)なら、全てのユーザーを同一のリージョンに接続させる

Photon Cloudを使用するアプリは、すべての利用可能なリージョンで動作し、追加料金はかかりません。

価格プランはこちらです。

Photon Cloudのダッシュボードでは、各リージョンでのゲームの利用状況をモニタリングでき、簡単にプランをアップグレード/ダウングレードすることができます。

ダッシュボードはこちらです。

{% if PUN_v2 Voice_v2 Realtime Quantum %}

C# Realtime API

Photon Realtime(ほとんどのPhoton SDKで使用されます)は、接続すべきベストリージョンを検知でき、そのリージョンへの接続を保持できるようにします。

これを実現するため、クライアントは常に接続時に接続可能なリージョンのリストをネームサーバーから取得します。
サーバーからの応答はLoadBalancingClient.RegionHandlerのセットアップに使用されます。LoadBalancingClient.RegionHandlerは、IConnectionCallbacksで定義されるOnRegionListReceived(RegionHandler regionHandler)コールバックからも提供されます。

通常、次のステップとしては、regionHandler.PingMinimumOfRegions()を呼び出して各リージョンへの現在のpingを検知します。完了時に呼び出すメソッドを渡し、最良のケースでは、以前の「ベストリージョンサマリー」を渡すこともできます(以下で説明します)。

サーバーへのping送信後、regionHandler.SummaryToCacheに結果がまとめられ、後で使用できるようにデバイス上に保存されます。

以前のセッションのSummaryToCacheがなければ、すべてのリージョンへpingが送信されるため、時間がかかります。
以前の結果が利用可能な場合、クライアントは以下を確認します:

a. リージョンリストが変更された場合(「以前のベストリージョン」がまだ利用可能な場合に対応)
b. pingが受け入れられない場合(以前に保存された値よりも1.5倍以上遅い)

どちらかに該当する場合は、すべてのリージョンへpingが送信され、新しい結果が選択されます。

ベストリージョンを使用すると、ダッシュボード内のサーバー側のリージョンフィルターと連携します。この機能によって、プレイヤーが利用可能なリージョンがオンデマンドで更新されます。

リージョンのリストにアクセスする場合、または前回の結果を上書きする場合には、リージョンのAPIリファレンスをご覧ください。
{% endif %}
{% if pun_v2 %}

PUN

PhotonNetwork.ConnectUsingSettings()を使用すると、デフォルトでベストリージョンの選択が行われます。

プレイヤーの設定に結果を自動的に保存することを除けば、ワークフローはRealtime APIと同じです。

ベストリージョンは「継続的」です。
クライアントは通常、1つのリージョンをより長い時間使用します。
その後の起動時に、再びこのリージョンにpingを実行します。
PUNは、UnityのPlayerPrefsを使用して、
ベストリージョンの概要を自動的に保存します。

利便性とデバッグの目的で、現在のベストリージョンとそのpingはUnityエディターのPhotonServerSettingsで公開されます。
ただし、Unity Editorのプレイモードでのみ有効です。
Unity Editorと同じマシンで実行されるビルドには、異なるベストリージョンが含まれる場合があります。
{% endif %}

{% if Realtime Quantum PUN Voice Fusion %}

ベストリージョンの検討

{txt: _shared/bestregion-issues}
{% endif %}

{% if PUN_v2 %}

開発リージョン

PUN v2.17から、「開発リージョン」という新機能を追加しました。
これは、PhotonServerSettingsで利用できる新しい設定です。
この設定では、すべての開発ビルドが同じリージョンを使用し、「ベストリージョン」を選択する際の初期のマッチメイキングの問題が回避されます。
「開発ビルド」はPhotonServerSettingsが作成されると自動的に有効化され、「開発リージョン」はUnityエディターでの初回実行時(PlayMode)に設定されます。

「開発リージョン」は、PhotonNetwork.ConnectUsingSettings()を使用して接続した際にUnityエディターおよび「開発」ビルドでのみ使用されます。
単純に値を削除すれば、Unityエディター内の「開発リージョン」や「開発ビルド」を無効化できます。

このため、開発段階でベストリージョン選択の問題を回避するには、最新のPUN 2バージョンにアップデート済みであるか確認してください。
Unityエディターでは1回実行してください(PlayModeと入力し、接続)。
任意のデモシーンから実行可能です。
このUnityエディターからの初回接続によって、PhotonServerSettingsインスペクターから参照できる「開発リージョン」が設定されます。
1回実行すればデバイスからビルドおよびテストが可能になります。また、すでに実行済みならば、新しいビルドを実行できます。
ビルド設定から「開発ビルド」が有効化されたことがわかるでしょう。開発期間の間、この設定のままとなります。
こうして、すべてのクライアント(Unityエディターおよびビルド)が同じ「開発リージョン」に接続します。

本番への移行前に、開発ビルドを無効化するのを忘れないでください。

: 1つのクライアントが開発ビルドまたはUnityエディターから接続し、その他のクライアントが非開発ビルドから接続している場合、それらのクライアントは2つの異なるリージョンに接続する可能性があります。

{% endif %}

{% if Realtime Quantum %}

特定のマスターサーバーへの接続

クライアントを特定のリージョンに接続させるには、AppSettings.FixedRegionに有効なリージョンコードを設定し、ConnectUsingSettings(settings)を呼び出してください。

SDKはネームサーバーから、リクエストしたリージョンのマスターサーバーアドレスを取得します(「Photon Cloudリージョンへの接続」の1)。その後、選択したリージョンのマスターサーバーに自動的に接続します(「Photon Cloudリージョンへの接続」の2)。

リージョンを固定すると、クライアントはリージョンリストを取得せず、ベストリージョンを得るための各リージョンへのping送信もスキップされるため、接続時間が短縮されます。

アプリのリージョンを固定した場合、変更にはアプリ更新が必要になります。理想的には、ベストリージョンとリージョン許可リストを使用してください。

リージョンリストを表示する方法

実行時にリージョンを選択する場合(例:利用可能なリージョンのリストをプレイヤーに表示し、プレイヤーにリージョンを選択させる場合)、まずネームサーバーに接続する必要があります。
ネームサーバーにクエリを実行し、現在利用可能なリージョンのマスターサーバーアドレスのリストを取得できます(図「Photon Cloudリージョンへの接続」の1)。

ネームサーバー」についてですが、ネームサーバーには利用可能なリージョン間で地理的にロードバランスが実行されます。 これによって、マスターサーバーのアドレスのリクエストにかかる時間が最低限に抑えられます。

C#クライアントSDK

C#

    loadBalancingClient.ConnectToNameServer()

正常に接続すると、内部的にLoadBalancingClient.OpGetRegions() が呼ばれます。結果的にloadBalancingClient.RegionHandlerが設定され、それがコードに実装されコールバックが登録されている場合にはOnRegionListReceivedを呼びます。

C#

    loadBalancingClient.OpGetRegions()

マスターサーバーのリストをもとにすべてのマスターサーバーにpingを送信でき、最低レイテンシーのゲームプレイを実現するうえでベストリージョンを把握できます。または、プレイヤーにリージョンを選択させることが可能です。これはRegionHandler.PingMinimumOfRegions()によっておこなえます。

クライアントがリージョンを決定したら、そのリージョンのマスターサーバーに接続します(図「Photon Cloudリージョンへの接続」の2)。

C#

    loadBalancingClient.ConnectToRegionMaster("us")

最後に、ルームに参加するかまたはルームを作成します(図「Photon Cloudへのクライアント接続」の3)。

C++クライアントSDK

  1. クラスClientのコンストラクターには、いくつかの任意のパラメータがあります。
    このうちの最後、 regionSelectionModeのデフォルト値はRegionSelectionMode::DEFAULTで、LoadBalancing::RegionSelectionModeのいずれかの値をとります。
    このパラメータには明示的にRegionSelectionMode::SELECTを渡してください。

  2. Client::connect()へのコールによってトリガーされた接続フローの際、クライアントはネームサーバーから利用可能なリージョンのリストを受信します。
    Listener は任意でListener::onAvailableRegions()コールバックを宣言します。
    regionSelectionModeRegionSelectionMode::SELECTを渡した場合には、Clientは利用可能なリージョンのリストから項目を自動的には選択しませんが、そのコールバックにそのリストが渡されます。
    このためListenerを実装する場合には、あらゆる基準にもとづいてリージョンを選択する意味のある実装で、そのコールバックのデフォルトの空の実装を上書きする必要があります。

  3. リージョンを選択するまで、接続フローは完全に一時停止します。

  4. 接続フローを続行するため、選択したリージョンをClient::selectRegion()に渡します。

注:
Client::selectRegion()Listener::onAvailableRegions()へのコールを受信した場合にのみ呼び出されることが想定されています(このコールバック内で直接、またはコールバックが返された後に selectRegion()を呼んでください)。
Listener::onAvailableRegions() へのコールを受信していない場合には、クライアントはリージョン選択の接続フローで正常な段階に達することができません。

Listener::onAvailableRegions()の実装例は、クライアントSDK内のdemo_loadBalancingのソースコードを参照してください。

C++

void NetworkLogic::onAvailableRegions(const ExitGames::Common::JVector<ExitGames::Common::JString>& availableRegions, const ExitGames::Common::JVector<ExitGames::Common::JString>& availableRegionServers)
{
	EGLOG(ExitGames::Common::DebugLevel::INFO, L"%ls / %ls", availableRegions.toString().cstr(), availableRegionServers.toString().cstr());
	mpOutputListener->writeLine(L"onAvailableRegions: " + availableRegions.toString() + L" / " + availableRegionServers.toString());
	// select first region from list
	mpOutputListener->writeLine(L"selecting region: " + availableRegions[0]);
	mLoadBalancingClient.selectRegion(availableRegions[0]);
}

selectRegion()onAvailableRegions()へのコールを受信後にのみ、接続フロー内で呼ばれる点に留意してください。
任意のタイミングでselectRegion()を呼んだり、onAvailableRegions()への単一のコールに対して複数回selectRegion()を呼ぶことはサポートされておらず、未確認の挙動が発生します。

Objective-C クライアント SDK

  1. クラス EGLoadBalancingClient のコンストラクターには、いくつかの任意のパラメータがあります。
    このうちの最後、regionSelectionModeのデフォルト値はEGRegionSelectionMode_DEFAULTで、 EGRegionSelectionMode.hのうちいずれかの値をとります。
    このパラメータには明示的にEGRegionSelectionMode_SELECTを渡してください。

  2. EGLoadBalancingClient::connect()へのコールによってトリガーされた接続フローの際、クライアントはネームサーバーから利用可能なリージョンのリストを受信します。
    EGLoadBalancingListenerは任意のEGLoadBalancingListener::onAvailableRegions()コールバックを宣言します。
    regionSelectionModeEGRegionSelectionMode_SELECTを渡した場合には、EGLoadBalancingClientは利用可能なリージョンのリストから自動的に項目を選択しませんが、そのコールバックにリストが渡されます。
    このためEGLoadBalancingListenerを実装する場合には、あらゆる基準にもとづいてリージョンを選択する意味のある実装で、そのコールバックのデフォルトの空の実装を上書きする必要があります。

  3. リージョンを選択するまで、接続フローは完全に一時停止します。

  4. 接続フローを続行するため、選択したリージョンをEGLoadBalancingClient::selectRegion() に渡します。

注:
EGLoadBalancingClient::selectRegion()は、EGLoadBalancingListener::onAvailableRegions()へのコールを受信した場合にのみ呼び出されることが想定されています(このコールバック内で直接、またはコールバックが返された後にselectRegion()を呼んでください)。
EGLoadBalancingListener::onAvailableRegions()へのコールを受信していない場合には、クライアントはリージョン選択のための接続フローで正常な段階に達することができません。

EGLoadBalancingListener::onAvailableRegions()の実装例は、クライアントSDK内のdemo_loadBalancing_objcのソースコードを参照してください:

Objective-C

- (void) onAvailableRegions:(EGArray*)availableRegions :(EGArray*)availableRegionServers
{
	NSString* r = [availableRegions componentsJoinedByString:@", "];
	NSString* s = [availableRegionServers componentsJoinedByString:@", "];
	EGLOG(EGDbgLvl::INFO, L"onAvailableRegions: %ls / %ls", [r UTF32String], [s UTF32String]);
	[mOutputListener writeLine:@"onAvailableRegions: %@ / %@", r, s];
	// select first region from list
	[mOutputListener writeLine:@"selecting region: %@", availableRegions[0]];
	[mLoadBalancingClient selectRegion:availableRegions[0]];
}

selectRegion()onAvailableRegions()へのコールを受信後にのみ、接続フロー内で呼ばれる点に留意してください。
任意のタイミングやステートでselectRegion()を呼んだり、onAvailableRegions() への単一のコールに対して複数回selectRegion()を呼ぶことはサポートされておらず、未確認の挙動が発生します。
{% endif %}

{% if Bolt %}

実行時にリージョンを選択する方法

ベストリージョンオプションを使用していない際に、接続するリージョンをプレイヤーに選択させたい場合があるかもしれません。
プレイヤーが共通の近くのリージョンに接続している場合には、これによってプレイヤー間のpingが低下したり、特定のリージョンでプレイしているフレンドのセッションに参加するのに役立つことがあります。

リージョン選択はPhoton Boltが実行して いない 場合にのみおこなわれ、またPhotonPlatformが初期化される前に実行する必要があります。
弊社はUdpKit.Platform.Photon.PhotonRegionクラス内の利用可能なリージョンのあらかじめ定義されたリストを破棄します。このクラスはリージョンをリスト化する際に使用できます。
以下のスニペットでは、実行時に対象リージョンを変更する方法を示します:

C#

public class Menu : Bolt.GlobalEventListener
{
    // Target Region
    private static int currRegion = 0;

    // List of available Regions
    private PhotonRegion.Regions[] availableRegions = new PhotonRegion.Regions[]
    {
        PhotonRegion.Regions.US,
        PhotonRegion.Regions.USW,
        PhotonRegion.Regions.JP,
        PhotonRegion.Regions.EU,
        PhotonRegion.Regions.SA
    };

    private void UpdateRegion()
    {
        if (BoltNetwork.IsRunning == false)
        {
            // Get the current Region based on the index
            var targetRegion = PhotonRegion.GetRegion(availableRegions[currRegion]);

            // Update the target region
            BoltRuntimeSettings.instance.UpdateBestRegion(targetRegion);

            // Log the update
            Debug.LogFormat("Update region to {0}", targetRegion.Name);

            // Next time we use the next region
            currRegion++;

            // Go back to 0
            if (currRegion == availableRegions.Length)
            {
                currRegion = 0;
            }

            // IMPORTANT
            // Initialize the Photon Platform again
            // this will update the internal cached region
            BoltLauncher.SetUdpPlatform(new PhotonPlatform());
        }
        else
        {
            BoltLog.Error("Bolt is running, you can't change region while runnning");
        }
    }
}

お分かりのとおり UpdateRegion()を呼ぶと常に、リストavailableRegionsの次のリージョンが選択され、使用するリージョンがメソッドBoltRuntimeSettings.instance.UpdateBestRegionを使ってアップデートされます。
リージョンはキャッシュされ、再作成しない限り変更されないため、プラットフォームを再初期化する必要がある点に留意してください。
{% endif %}

{% if Fusion %}

実行時にリージョンを選択する方法

PhotonAppSettingsまたはコードでリージョンが設定されていない場合、デフォルトでFusionはベストリージョンへの接続を試みます。
これは起動時に処理されて、全ての利用可能なリージョンにpingを送信し、最小pingのリージョンへ接続します。
ベストリージョンは、必ず同じリージョンが選択されるとは限りません。pingが近かったり全く同じ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;
    }
}

{txt: fusion/v2/manual/connection-and-matchmaking/region-list}

{% endif %}

{% if PUN Voice Realtime Bolt Quantum Fusion %}

中国本土のリージョンを使用

まず、Photonアプリケーション用に、中国本土リージョンへのアクセスをリクエストする必要があります。弊社宛にメールでご連絡ください。お客様のAppID用に解除します。
弊社のウェブサイトから、中国本土リージョンで使用される有償プランに申し込むことはできません。 有償プランの見積りについては、メールでご連絡ください。

ファイアウォールによってトラフィックがブロックされる可能性があるため、中国ローカルのPhotonネームサーバーを使用する必要があります。
中国のPhotonネームサーバーは「ns.photonengine.cn」です。

中国本土外からクライアントに接続しても、良い結果は得られません。
また、Photonサーバーから中国本土外のサーバーへの接続(例:カスタム認証、WebHook、WebRPCなど)の信頼性は高くありません。

重要:現段階では、ダッシュボードでアプリケーションに変更を加えても、中国のアプリケーションのキャッシュに自動的に反映されません。 アップデートをご希望の場合には、弊社宛にメールでご連絡ください。

また、法的な理由から、中国向けには個別のビルドが必要となり、個別のAppIdの使用を推奨します。
例えば、ビルドごとにAppIdやPhotonネームサーバーを変更するために、(任意の)条件コンパイルを使用してください。

中国マーケット用に特別なビルドを作成するには、お使いのクライアントSDKのマニュアルをご覧ください。

{% endif %}

{% if Voice_v1 %}

Photon Voice

  1. 中国リージョンが解除されたアプリケーションにAppIDを設定します。 同一プロジェクト内で、複数のビルドが有る場合には以下を参照してください:

    C#

    void Awake()
    {
    // TODO: replace compile condition with your own
    #if CHINA
        PhotonNetwork.PhotonServerSettings.VoiceAppID = "ChinaVoiceAppId"; // TODO: replace with your own AppId
    #else
        PhotonNetwork.PhotonServerSettings.VoiceAppID = "nonChinaVoiceAppId"; // TODO: replace with your own AppId
    #endif
    }
    
  2. 「LoadBalancingClient.cs」ファイルを開き、「ns.photonengine.cn」にNameServerHostを設定してください:

C#

    // TODO: replace compile condition with your own
    #if CHINA
        public const string NameServerHost = "ns.photonengine.cn";
    #else
        public const string NameServerHost = "ns.exitgames.com";
    #endif

PUNはVoiceに含まれているため、PUNに必要となる手順にも従わなければなりません。
Photon Voiceは自動的に同じサーバーに接続します。

{% endif %}

{% if PUN_v2 %}

PUN 2

PhotonServerSettingsを使用

PUN 2: PhotonServerSettings for China
PUN 2: 中国用のPhotonServerSettings

コードを使用

C#

void ConnectToChina()
{
    AppSettings chinaSettings = new AppSettings();
    chinaSettings.UseNameServer = true;
    chinaSettings.ServerAddress = "ns.photonengine.cn";
    chinaSettings.AppIdRealtime = "ChinaPUNAppId"; // TODO: replace with your own PUN AppId unlocked for China region
    chinaSettings.AppVersion = "ChinaAppVersion"; // optional
    PhotonNetwork.ConnectUsingSettings(chinaSettings);
}

{% endif %}

{% if Voice_v2 %}

Photon Voice

PUNインテグレーションがない場合(手動音声クライアント接続)

C#

void ConnectToChina()
{
    // you could also set these values directly in the VoiceConnection.Settings from Unity Editor
    // in that case call voiceConnection.ConnectUsingSettings(); without passing parameter
    AppSettings settings = new AppSettings();
    settings.FixedRegion = "cn";
    settings.UseNameServer = true;
    settings.AppIdVoice = "ChinaVoiceAppId"; // TODO: replace with your own Voice AppId unlocked for China region
    settings.AppVersion = "ChinaAppVersion"; // optional
    settings.Server = "ns.photonengine.cn";
    voiceConnection.ConnectUsingSettings(settings);
}

PUNインテグレーションがあり、PUN設定を使用する場合

VoiceにはPUNが含まれるため、PUNに必要な手順に沿って設定をおこないます。
PhotonVoiceNetwork.Instance.UsePunSettingsfalseに設定されていない限りPhoton Voiceは自動的に同じサーバーに接続します。
その場合には、上記の手動音声クライアントの手順に従ってください。

PhotonServerSettingsを使用

PUN 2: PhotonServerSettings for China
PUN 2: 中国用のPhotonServerSettings

コードを使用

C#

void ConnectToChina()
{
    AppSettings chinaSettings = new AppSettings();
    chinaSettings.UseNameServer = true;
    chinaSettings.ServerAddress = "ns.photonengine.cn";
    chinaSettings.AppIdRealtime = "ChinaPUNAppId"; // TODO: replace with your own PUN AppId unlocked for China region
    chinaSettings.AppSettings.AppIdVoice = "ChinaVoiceAppId"; // TODO: replace with your own Voice AppId unlocked for China region
    chinaSettings.AppVersion = "ChinaAppVersion"; // optional
    PhotonNetwork.ConnectUsingSettings(chinaSettings);
}

{% endif %}

{% if PUN_v1 Voice_v1 %}

PUN Classic

  1. 中国リージョンが解除されたアプリケーションにAppIDを設定します。
    同一プロジェクト内で、複数のビルドが有る場合には以下を参照してください:

    C#

    void Awake()
    {
    // TODO: replace compile condition with your own
    #if CHINA
        PhotonNetwork.PhotonServerSettings.AppID = "ChinaPUNAppId"; // TODO: replace with your own AppId
    #else
        PhotonNetwork.PhotonServerSettings.AppID = "nonChinaPUNAppId"; // TODO: replace with your own AppId
    #endif
    }
    
  2. 「NetworkingPeer.cs」ファイルを開き、「ns.photonengine.cn」にNameServerHostを設定してください:

C#

    // TODO: replace compile condition with your own
    #if CHINA
        public const string NameServerHost = "ns.photonengine.cn";
    #else
        public const string NameServerHost = "ns.exitgames.com";
    #endif
  1. CloudRegionCodeCloudRegionFlagのenumを更新し、新たな「CN」(または「cn」)リージョントークンを以下のように追加してください:

C#

    public enum CloudRegionCode
    {
        // ...
    // TODO: replace compile condition with your own
    #if CHINA
        ///<summary>Chinese Mainland, Guang Dong area, cn</summary>
        cn = 13,
    #endif
    };
    [Flags]
    public enum CloudRegionFlag
    {
        // ...
    // TODO: replace compile condition with your own
    #if CHINA
        cn = 1 << 12,
    #endif
    };
  1. PhotonNetwork.ConnectToRegion(CloudRegionCode.cn, gameVersion)を使用して、中国本土リージョンに接続してください。

C#

        // TODO: replace compile condition with your own
        #if CHINA
            PhotonNetwork.ConnectToRegion(CloudRegionCode.cn, gameVersion);
        #else
            // TODO: connect to any other region
        #endif

{% endif %}

{% if Realtime %}

C# Client SDKs

C#

void ConnectToChina()
{
    AppSettings chinaSettings = new AppSettings();
    chinaSettings.UseNameServer = true;
    chinaSettings.ServerAddress = "ns.photonengine.cn";
    chinaSettings.AppIdRealtime = "ChinaRealtimeAppId"; // TODO: replace with your own Realtime AppId unlocked for China region
    chinaSettings.AppVersion = "ChinaAppVersion"; // optional
    loadBalancingClient.ConnectUsingSettings(chinaSettings);
}

C++クライアントSDK

  • Client::connect()へのパラメータserverAdress`に「ns.photonengine.cn」を渡します。
  • パラメータ serverTypeServerType::NAME_SERVERのデフォルト値を保持するよう、留意してください。

Objective-CクライアントSDK

  • EGLoadBalancingClient::connect()で、パラメータserverAdressにns.photonengine.cnを渡す。
  • パラメータ serverTypeはデフォルト値EGServerType_NAME_SERVERのままにしてください。
    {% endif %}

{% if Fusion %}

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");
        }
    }
}

{% endif %}

Back to top