よくある質問

Contents

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

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

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

Back To Top

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

Photon Realtime wraps up all generic features needed for the load balancing of Photon. It is a product as much as a defined workflow to use Name Server, Master Server and Game Servers. Photon Realtime (a.k.a. LoadBalancing) is the basis for many games using Photon.

While Photon Realtime is independent from Unity, PUN adds many comfortable features for Unity and makes Realtime (the lower level) even easier to use.

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

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

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

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

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

Back To Top

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

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

Back To Top

Photon Cloud

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

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

Back To Top

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

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

Back To Top

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

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

Back To Top

Photon Bolt

厳密な比較とは?

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

Back To Top

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

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

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

Back To Top

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

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

Back To Top

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

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

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

Back To Top

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

>Firewall Configuration
Firewall Configuration.

Back To Top

スニペット

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

Back To Top

テレポートする方法は?

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

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

Back To Top

その場合、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;
        }
    }
}

Back To Top

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

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

Back To Top

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

Back To Top

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プロパティを確認します。

Back To Top

請求

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

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

Back To Top

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

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

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