よくある質問

目次

どのPhoton製品を使用するべきでしょうか?

対象となるゲームやプロジェクトの特性によって異なるため、これはむずかしい質問です。 ただし、弊社は以下のように推奨しています:

ご不明点な点がある場合、お問い合わせください。

トップに戻る

Photon RealtimeとPUNのちがいは何ですか?

Photon Realtimeは、Photonのロードバランシングに必要な汎用的な機能をすべて包含しておりネームサーバー、マスターサーバー、ゲームサーバーを使用するための定義されたワークフローともいえる製品です。Photon Realtime(別名LoadBalancing)は、Photonを使った多くのゲームの基礎となっています。

Photon RealtimeはUnityから独立していますが、PUNはUnityに多くの快適な機能を追加し、Realtime(下位レベル)をさらに使いやすくしています。

これらの製品は同じバックエンド、サーバーアプリケーション、低いレベルの要素を共有しており、中核となるコンセプトも同一です。 当初、PUNはより優れたUNet(旧式のUnity Networking)と位置づけられていました:同様のAPIを保持し、さらに強固なバックエンドと豊富な機能を提供していました。 そして、その後PUNは次第に分化して、Unity上でのマルチプレイヤー向けNo1ソリューションとなりました。

Photon Realtime Unity SDKと比較して、PUNは以下のようなさらに高度なレベルの機能を提供し、またこれらの機能は購入後にすぐに使用できます:

  • Magic Unity コールバック
  • ネットワークオブジェクトをシリアル化および同期する外部Unityコンポーネント:もっとも重要なものにPhotonViewがあります
  • PunRPC
  • オフラインモード
  • ...

詳細はこちらを参照してください。

ただし、PUNはWebhookルームステートの保持をサポートしますが、保存されたゲームの画面を読み込む際に、シーン内のネットワークオブジェクトのステートを完全に復旧することはできません。 詳細は、こちらを参照してください。

トップに戻る

LoadBalancing APIとPhoton Realtimeのちがいは何ですか?

LoadBalancing APIとPhoton Realtimeは、名称は異なりますがおなじものを指しています。 LoadBalancing APIまたはLoadBalancing Client APIは、Photon Realtime製品向けに弊社が提供している、クライアントSDK内で利用できるプログラミングインターフェースです。

トップに戻る

Photon Cloud

Photon Cloudのステータスを確認する方法は?

Photon Cloudのステータスを確認するには、こちらを参照するか、Twitterで@photon_statusをフォローしてください。 最新のステータスについてお知らせします。

トップに戻る

デフォルトのPhotonリージョンは?

少なくとも1つのリージョンが利用できる場合、クライアントはPhoton Cloudに接続可能となるべきです。 この点を保証するため、ディベロッパーが明示的に設定しない場合や「ベストリージョン」オプションを選択しない場合には、デフォルト値を設定するか、 またはデフォルト値を使用する必要があります。 デフォルト値はクライアントSDKによって異なります。 ネイティブSDKでは、OpGetRegionsでサーバーによって返されるリージョンリストのインデックス0の値です。 UnityおよびDotNet SDKでは、デフォルトのリージョンは「EU」とする必要があります。

トップに戻る

一部のリージョンを無効にすることは可能ですか?

はい。 許可されたリージョンのリストを定義することにより、別の方法で機能します。 Dashboardリージョンのフィルタリング"の詳細はこちら。

トップに戻る

Photon Bolt

厳密な比較とは?

厳密な比較は、ベクトルに対しておおよその比較を行う組み込みのa != bを使用する代わりに(a.x != b.x) || (a.y != b.y) || (a.z != b.z)を行います。複製が必要な非常に小さな変更がある場合に役立ちます。

トップに戻る

再配布可能なBolt Serverビルドを作成する方法はありますか?

はい、Boltはヘッドレスサーバーの作成に対応しているため、任意のコンピューターで実行できます。 Photon Cloudを使用するBolt Freeを使用している場合、他のプレイヤーが参加できるようにルームを公開するだけです。Bolt Proを使用している場合でも、ローカルまたは任意のクラウドサービスで実行できます。IPが接続する他のプレイヤーに送信する方法が必要です。

また、こちらに単純なヘッドレスサーバーのサンプルも用意されています。

トップに戻る

ロケットのような発射物のラグを補償する必要がありますか?

発射体を発射する武器の場合、遅れ補償は問題になる可能性が高くなります。 たとえば、発射物がサーバー上で自律的に存在する場合、発射物はどの時間空間に存在する必要がありますか? 発射物をサーバーでシミュレートして移動する準備ができるたびに、他のすべてのプレイヤーを「後退」させる必要がありますか? 必要な場合、他のプレイヤーをどれだけ時間的に後方に移動させるべきですか?これらは考慮すべき興味深い質問です。 単に発射物オブジェクトを遅らせることはありません(つまり、クライアントで発射物を発射する音を予測しないということではなく、実際の発射物が遅れ補償されないというだけです)。 詳細はこちら

トップに戻る

プロジェクトのすべてのボルトアセットをクリアする方法は?

すべてのBoltアセットは project.jsonファイルにシリアル化されているため、以下をクリアします:

  1. Unityを閉じる。
  2. <Project Folder>/Assets/Photon/PhotonBolt/project.jsonファイルを削除する。
  3. Unityを開く。
  4. Boltのコンパイル。Bolt/Compile Assemblyメニュー。

トップに戻る

EC2のヘッドレスサーバーにBolt Freeを使用する場合の推奨構成は何ですか?

>Firewall Configuration
Firewall Configuration.

トップに戻る

スニペット

ゲームの開発に役立つ小さなコードのリストを次に示します。

トップに戻る

テレポートする方法は?

デフォルトでは、Boltは、移動する距離がエンティティで指定されたTeleport Thresholdよりも短い場合、エンティティを自動的に補間/補外します。 これを超えると、スムージングをスキップするテレポートが強制され、これは自動的に行われます。 Bolt.IState.SetTeleport(NetworkTransform transform)を使用してテレポートを強制することができます。これは、クライアントに送信される次の位置更新のリクエストを本質的にキューに入れ、設定に関係なくテレポートを強制します(1つの送信ティックに対して-フラグは送信後にfalseに戻ります)。

void Teleport(Vector3 newPosition)
{
    state.SetTeleport(state.transform);
    player.transform.position = newPosition
}

トップに戻る

その場合、SessionListUpdatedが呼び出されないときに検索時にセッションが存在しないことをどのように確認しますか?

たとえば、1.2.9より前に、ルームリストの更新を5秒に設定した場合、コールバックを受信するには5秒待つ必要があります。 その後、使用可能なセッションがないことがわかります。 これで、Photon Bolt 1.2.9以降では、同じ5秒間待機するように接続したときにコルーチンプロセスを開始できます。

Getting Startedサンプルに付属する基本メニュースクリプトに実装例を含めました。 主な部分は次のとおりです。

public class Menu : Bolt.GlobalEventListener
{
    private Coroutine _timerRoutine;

    // ...

    public override void BoltStartDone()
    {
        // ...

        if (BoltNetwork.IsClient)
        {
            // This will start a server after 10secs of wait if no server was found
            _timerRoutine = StartCoroutine(ShutdownAndStartServer());
        }
    }

    public override void BoltShutdownBegin(AddCallback registerDoneCallback)
    {
        registerDoneCallback(() =>
        {
            BoltLauncher.StartServer();
        });
    }

    public override void SessionListUpdated(Map<Guid, UdpSession> sessionList)
    {
        // Stop background routine if a server was found
        if (_timerRoutine != null)
        {
            StopCoroutine(_timerRoutine);
            _timerRoutine = null;
        }
    }
}

トップに戻る

ゲームサーバーの起動時に特定のポートを設定する方法は?

Photon Boltインスタンスをゲームサーバーとして実行する場合、ピアがバインドを試行するIP/ポートを構成できます。 これは、たとえばクラウドサービスでゲームをホストしていて、使用するポートの範囲が限られている場合に便利です。

デフォルトでは、Boltはオペレーティングシステムに内部ソケットをバインドするポートを選択させますが、以下に示すように、 BoltLauncher.StartServerの適切なオーバーロードを呼び出すことで上書きできます。

public static class BoltLauncher
{
// ...
    public static void StartServer(int port = -1);
    public static void StartServer(UdpEndPoint endpoint, string scene = null);
    public static void StartServer(UdpEndPoint endpoint, BoltConfig config, string scene = null);
// ...
}

したがって、この方法でサーバーを起動できます:

void StartBoltServer()
{
    // Custom Port number
    BoltLauncher.StartServer(<custom port>);

    // OR

    // Custom IP and Port number
    BoltLauncher.StartServer(new UdpEndPoint(UdpIPv4Address.Parse("<custom IP>"), <custom port>))
}

トップに戻る

Boltのデフォルトの設定をコードを使用して変更する方法は?

サーバーまたはクライアントを起動する前にコードでBoltの設定をカスタマイズしたい場合には、 BoltRuntimeSettings.GetConfigCopyを呼んでください。これによって、返されたオブジェクトが修正され、StartClientまたはStartServerへの最後の引数として渡されます。

コードを使用すれば、Bolt Settings ウィンドウに表示されていない詳細設定にもアクセスできます。

    BoltConfig config = BoltRuntimeSettings.instance.GetConfigCopy();

    // change any settings you want on the config object here,
    // be aware that bolt will not verify/limit any settings when you do
    // it directly in code, so you can break things completely by supplying
    // incorrect/invalid config values.

    BoltLauncher.StartServer(new UdpEndPoint(UdpIPv4Address.Any, 27000), config);

トップに戻る

Boltでインターネット接続が失われたことを検出するにはどうしたらいいですか?

デフォルトで、インターネットの接続が失われるとBoltがPhoton Cloudサービスやリモートサーバー、またはクライアントとの接続不良を検出します。すべての場合において、タイムアウトが発生した後にローカルのインスタンスがシャットダウンされます。これは主に接続サイド(サーバなのかクライアントなのか)および接続タイプによります。

シャットダウンにあたり、現在シーンで実行されている次のコールバックをいずれかのBolt.GlobalEventListenerで受信します。:

public override void BoltShutdownBegin(AddCallback registerDoneCallback, UdpConnectionDisconnectReason disconnectReason)
{
    registerDoneCallback(() =>
    {
        // Will show disconnect reason.
        Debug.LogFormat("Shutdown Done with Reason: {0}", disconnectReason);

        // Show the current connectivity of the peer
        ConnectivityCheck();

        // Lods the Scene at index 0
        SceneManager.LoadScene(0);
    });
}

void ConnectivityCheck()
{
    if (Application.internetReachability == NetworkReachability.NotReachable)
    {
        Debug.Log("NotReachable");
    }
    else if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)
    {
        Debug.Log("ReachableViaCarrierDataNetwork");
    }
    else if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork)
    {
        Debug.Log("ReachableViaLocalAreaNetwork");
    }
}

インターネット接続不良により切断されたかどうかを確認するには、Unity APIから閲覧可能なApplication.internetReachabilityプロパティを確認します。

トップに戻る

請求

学生、趣味でおこなっているディベロッパー、インディー向けの割引はありますか?

弊社の製品にはすべて、無料プランとワンショットのプランがあります。 また弊社は通常、Unityアセットストアのセールに参加し、また当選者にはクーポンを提供しています。

トップに戻る

1つのPhotonアプリケーションに、複数の100CCUプランを組み合わせることはできますか?

いいえ。 100CCUプランは1つのAppIDにつき1回のみ適用でき、複数の100CCUプランを使用することはできません。 複数のPUN+アセットシートを購入している場合には、各AppIDに対して個別の無料100CCUを適用する必要があります。 1つのアプリに対してさらに多くのCCUが必要な場合、次の上位プランは500CCUです。 月額または年額プランをご利用の場合には、その月額/年額プランのCCUに加えて、12ヶ月間有効の100CCUを使用できます。


ドキュメントのトップへ戻る