Engine続行するにはJavascriptを有効化してください。Realtimeインディーかプロのディベロッパーかを問わず、誰でもリアルタイムマルチプレイヤーゲームを開発してグローバルに配信可能です。PUNインディーかプロのディベロッパーかを問わず、誰でもリアルタイムマルチプレイヤーゲームを開発してグローバルに配信可能です。Quantumマルチプレイヤーゲーム開発の革新に参加しよう!MOBA、ブローラー、RTS、戦闘ゲーム、スポーツゲームを迅速な予測ネットワーキングエンジンで開発できます。Chat同時接続数をスケールできるクロスプラットフォームのチャットシステムをあなたのアプリに簡単に統合できます。Voice大規模かつインターナショナルな最先端のライブボイスチャット。すべてのマルチプレイヤーエンジンと併用可能。Classic(PUN1とも呼ばれます)はPUNのはじめの主要バージョンです。現在は、リファクタリングおよび機能拡張されたPUN2に切り替わっています。新しいプロジェクトはPUN2をご利用いただき、また可能であれば既存のプロジェクトについてもPUN1からPUN2へ移行していただくよう強く推奨しています。Cloassicは今後数か月メンテナンスされます。重要なバグの修正や新しいUnityバージョンのサポートは行いますが、新機能の追加はPUN2のみとなります。v2WebGLのバックグラウンドタブユーザーが複数のブラウザタブを開くと、アクティブな(可視)タブのみが定期的に高頻度で更新されます。非アクティブ(不可視)のタブは、ほとんどのブラウザで1秒間に1回しか更新されません。この場合の可視性は、ウィンドウが必ずしもフォアグラウンドにあることを意味するのではなく、別のウィンドウの裏で非フォーカス状態の場合もあります。これはUnityのWebGLエクスポートにも該当し、送受信メッセージが1秒間に1回しか処理されないため、問題が発生する可能性があります。更新頻度が低い状況下でメッセージキューが増え、さらに多くの更新処理が必要となります。多くのアプリは、タブがバックグラウンドにある間に同期を失って切断されます。WebGLアプリケーションはJavaScriptを使用しているので、ブラウザからゲームロジックにメッセージを直接送信するために、これらのビルドを拡張することができます。この場合、ゲームから切断するか、アプリケーションタブがバックグラウンドにある際に低い更新レートの間で追加の更新を強制することが可能です。これをおこなうには、次のいずれかの方法を実行します。WebGLビルドを修正それぞれのアプローチについて説明する前に、アプリケーションタブがバックグラウンドにあるかを判断する方法について説明します。このためvisibilitychangeイベントにフックして変更をリッスンします。2つの状態は区別されます:hidden(隠れた)状態と「その他の状態」です。状態の変化を検出するたびに、ゲームロジックからゲームオブジェクトにメッセージを送信し、機能を実行することができます。これは、次のJavaScriptコードスニペットを使用しておこなうことができます。}});</script>上記の場合'Receiver'というゲームオブジェクトにメッセージを送信しています。このオブジェクトでは、DoSomething(Else)`という関数を実行しています。この関数は、ゲームオブジェクトに添付された任意のスクリプト内に設定することが可能です。このコードをWebGLアプリケーションに添付するには、ビルドに移動して作成したindex.htmlファイルを開きます。<body>タグの34行目に挿入します。'SendMessage'関数のパラメータを調整してください。接続を閉じるWebGLアプリケーションタブがバックグラウンドになると、最初のアプローチではクライアントをPhotonから切断します。アプリケーションがフォアグラウンドに戻ると、Photonに(再)接続しようとします。これは、上記のシナリオの処理に推奨される方法です。これをおこなうために、index.htmlファイルの上のコードスニペットを使用し、ゲームロジックから'Disconnect'および'Reconnect'機能にメッセージを送信しています。}}備考:ブール変数wasConnectedは、クライアントが以前ルームに参加した場合にはtrueに設定されます。この情報があれば、ロビーに最初に参加せずに、ルームに直接再接続して再入室を試みることができます。ReconnectAndRejoinを正しく使用するにはルームとそのオプションを正しく設定する必要があります。これはPlayerTtl(サーバーから切断されるまでにプレイヤーが非アクティブになるまでの時間をミリ秒で表します)を0以上の値に設定する必要があることを意味します。空のルームを維持したい場合は、EmptyRoomTtl(空のルームが切断されるまで、サーバーのメモリに保持される時間(ミリ秒単位))を0以上の値に設定します。このアプローチを使用してReconnectAndRejoinをテストする場合、両方の値を30,000(30秒)または60,000(60秒)に設定するよう推奨します。第2のアプローチでは、ゲームロジック、特にネットワーキングロジックへの追加作業が必要です。このアプローチを使用して、ゲームに関連するメッセージを送受信せずに接続を維持するよう試みます。これは、インタレストグループを使用して特定のグループに迅速に登録または登録解除することで達成できます。PUNで使用されるデフォルトのグループは0です。このグループからは登録解除できないため、問題解決に使用することはできません。上記のように、このアプローチを使用する場合には別のインタレストグループを使用する必要があります。以下の例では、グループ1に自由に登録/登録解除できるためグループ1を使用しています。Photonに接続する際には、希望するグループへの送受信を有効にしてください。true);また、インスタンス化されたゲームオブジェクト(PhotonViewコンポーネントが添付されているもの)が、グループ変数を対象のグループに設定していることを確認してください。1;}ほとんどのネットワークトラフィックを特定のグループに'移動'させたら、ブラウザのJavaScriptから呼び出されるこれら2つの機能を引き続き追加できます。この例では、'Subscribe'および'Unsubscribe'と名づけます。false);}最後に、上記2つの関数を呼び出せるように「index.html」ファイルに追加するJavaScriptスニペットを調整します。この方法は多くの作業を必要とし、多くの問題を引き起こす可能性があるため問題解決の方法として推奨されません。強制的に更新をおこなって接続を維持このアプローチは、すべての着信および発信メッセージを強制的に処理するため、さきに述べた2つのアプローチとは異なります。false;}});</script>これは、現在の可視状態にもとづいてタイマーを作成および破棄します。このタイマーがアクティブになると250ミリ秒ごと、または1秒間に4回該当する関数を呼び出します。この間隔は、SendMessage関数のパラメータと同様に必要に応じて調整することができます。これを更新すればWebGLプロジェクトの調整も続行できます。DoSomethingを作成します。PhotonNetwork.networkingPeer.SendOutgoingCommands();}これにより、ブラウザのタブがバックグラウンドにあってもネットワークのメッセージフローが増加します。このアプローチは良い方法のように思われますが、大きな欠点もあります。ゲームが実際に表示されていないときにキャラクターをコントロールすることができないので、キャラクターのトランスフォームに関連する変更ができません。したがって、常に同じ情報を他のクライアントに送信することになり、重要なコンテンツがないメッセージ数が増えます。このため、このアプローチは推奨されません。第3のアプローチは推奨されていませんが、最後のアプローチとして使用できます。PhotonNetwork.networkingPeer.SendAcksOnly();}これは、接続を維持するためにサーバーに確認応答を送信するだけです。追加作成されたこの間隔では、ゲームロジックに関連するメッセージは処理されません。