This document is about: PUN 2
SWITCH TO

PUN Classic (v1)、PUN 2、Boltはメンテナンスモードとなっております。Unity2022についてはPUN 2でサポートいたしますが、新機能が追加されることはありません。お客様のPUNプロジェクトおよびBoltプロジェクトが停止することはなく、将来にわたってパフォーマンス性能が落ちることはありません。 今後の新しいプロジェクトについては、Photon FusionまたはQuantumへ切り替えていただくようよろしくお願いいたします。

リージョン

Photon Cloudは、世界中で低レイテンシのゲームを実行するための、グローバルな通信基盤を提供します。 これは、様々なリージョンでサーバーをホスティングすることで実現されています。

利用可能なリージョンは、プロジェクトの運用期間を通じて変わる可能性があります。クライアントは、Photonのネームサーバーから最新のリージョンのリストを取得できます。

各リージョンは、他のリージョンと完全に分離されています。リージョンは、マスターサーバー(マッチメイキング用)とゲームサーバー(ルームのホスト)で構成されます。

photon cloud regions' connect flows
Photon Cloudリージョンへの接続

利用可能なリージョンのリストは、製品ごと(Fusion、Quantum、Chatなど)に異なります。 リージョン許可リストによって、AppIdごとにどのリージョンを利用可能にするかを定義することができます(後述)。

利用可能なリージョン

Photon Cloudのサーバーは、世界中の複数のホスティングセンターに分散しています。

Photon Cloudの各リージョンは「リージョントークン」で識別されます。

特定のリージョンに接続するには、AppSettings下のPhotonServerSettingsでリージョンコードを「Fixed Region」と設定します。 PhotonNetwork.ConnectToRegionを使用するには、手動でネットワーキングクライアントを設定する(主にAppIdとAppVersion)必要があります。これは、この場合にはPhotonServerSettingsが使用されないためです。

利用可能なリージョンとトークンのリスト:

リージョントークン(コード)の文字列は、大文字と小文字を区別しません。:「EU」と「eu」はどちらも有効で、同じヨーロッパリージョンを指します。
リージョンホスティング場所トークン
Asiaシンガポールasia
Australiaメルボルンau
Canada, Eastモントリオールcae
中国本土 (こちらをご覧ください)上海cn
ヨーロッパアムステルダムeu
インドチェンナイin
日本東京jp
南アフリカヨハネスブルグza
南米サンパウロsa
韓国ソウルkr
トルコイスタンブールtr
アラブ首長国連邦ドバイuae
アメリカ(東)ワシントンD.C.us
アメリカ(西)サンノゼusw
アメリカ(南中部)ダラスussc
1:中国本土では、個別のAppIdとプランが必要です。

リージョン許可リスト

Photon Cloudの利用可能なリージョンのリストは、アプリケーションごとに、ダッシュボードから直接オンザフライでフィルタリングできます。

photon cloud: regions allowlist
Photon Cloudリージョンのフィルタリング

ダッシュボードの該当アプリケーションの管理画面を開き、リージョン許可リストの「編集」をクリックしてください。すると、許可するリージョンのリストを入力できる入力欄が表示されます。

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

許可リストを入力して保存すると、ネームサーバーはフィルタリングされたリージョンのリストのみを返すようになり、クライアントはそのリストからリージョンを選択することになります。 ダッシュボードの更新が反映されるまで、最大10分かかることを考慮してください。

リージョンの選択方法

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

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

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

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

Photon Cloudを使用するアプリケーションは、全ての利用可能なリージョンで動作し、追加料金はかかりません。価格プランをご覧ください。

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

ベストリージョンの選択

PUNとPhoton Voiceは、ベストリージョンを選択する際にRealtime APIレイヤーに依存しています。

C# Realtime API

Photon Realtimeは接続すべきベストリージョンを検知でき、プレイヤーがそのリージョンへの接続を保持できるようにします。

これを実現するため、クライアントは接続時に接続可能なリージョンのリストをネームサーバーから常に取得します。

サーバーからの応答はLoadBalancingClient.RegionHandlerの設定に使用されます。LoadBalancingClient.RegionHandlerは、IConnectionCallbacksで定義されるとおり、OnRegionListReceived(RegionHandler regionHandler)`もコールバックによって提供されます。

通常、次のステップはregionHandler.PingMinimumOfRegions()を呼び、各リージョンへの最新のpingを検出することです。完了時には、呼び出すメソッドを渡す必要があり、最良のケースでは、以前の実行から「ベストリージョン・サマリー」を渡すこともできます(以下で説明します)。

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

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

a. リージョンリストが変更された場合(「以前のベストリージョン」がまだ利用可能な場合に対応)

b. pingが受け入れられなくなった場合(以前に保存された参照値よりも1.5倍以上遅い)

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

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

リージョンのリストにアクセスする場合、または前回の結果を上書きする場合には、リージョンのAPIリファレンスを参照してください。

PUN

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

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

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

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

ベストリージョンの検討

「ベストリージョン」オプションは、決定的なものではありません。 リージョンにあまり差がない場合や、まったく同じping計算がされた場合には、「ランダム」になる可能性があります。

理論上は以下の設定が可能です:

  • 同一デバイスから、複数リージョンに対してまったく同じpingを設定します。同じネットワークに接続したクライアント上で異なるリージョンに接続する場合には、ランダムになります。
  • 同じネットワークに接続した異なるデバイス上(または同じデバイス上で異なる試行を実行する)で、同じリージョンに対して異なるping値を設定します。

たとえば、「us」と「usw」(または「ru」と「rue」)の場合、オンラインリージョンの許可リストを使用してリージョンを選択するか、または明示的にリージョンに接続します。

デバッグをおこなうには、ロギングレベルを「情報」に設定し、「現在のベストリージョン」をクリアしてください(PUNの場合:PhotonNetwork.BestRegionSummaryInPreferences = null)。詳細を参照するか、またはメールでログを送信してください。

開発リージョン

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

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

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

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

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

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

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

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

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

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

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

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

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);
}
Back to top