Engine続行するにはJavascriptを有効化してください。Realtimeインディーかプロのディベロッパーかを問わず、誰でもリアルタイムマルチプレイヤーゲームを開発してグローバルに配信可能です。PUNインディーかプロのディベロッパーかを問わず、誰でもリアルタイムマルチプレイヤーゲームを開発してグローバルに配信可能です。Quantumマルチプレイヤーゲーム開発の革新に参加しよう!MOBA、ブローラー、RTS、戦闘ゲーム、スポーツゲームを迅速な予測ネットワーキングエンジンで開発できます。Chat同時接続数をスケールできるクロスプラットフォームのチャットシステムをあなたのアプリに簡単に統合できます。Voice大規模かつインターナショナルな最先端のライブボイスチャット。すべてのマルチプレイヤーエンジンと併用可能。Classic(PUN1とも呼ばれます)はPUNのはじめの主要バージョンです。現在は、リファクタリングおよび機能拡張されたPUN2に切り替わっています。新しいプロジェクトはPUN2をご利用いただき、また可能であれば既存のプロジェクトについてもPUN1からPUN2へ移行していただくよう強く推奨しています。Cloassicは今後数か月メンテナンスされます。重要なバグの修正や新しいUnityバージョンのサポートは行いますが、新機能の追加はPUN2のみとなります。3DのためのPhotonNetworkプラグインPUNをインポートすると、「Wizard」ウィンドウがポップアップ表示されます。クラウドに登録するEメールアドレスを入力するか、既存アカウントのAppIdを入力するか、または「セルフホスティング」Photonに切り替えて、サーバーのアドレスを入力してください。これによって、プロジェクトのクラウドサービスまたは独自のPhotonサーバーの設定であるPhotonServerSettingsが作成されます。PUNは多くのファイルで構成されていますが、非常に重要なのはPhotonNetworkです。このクラスには、必要となるすべての関数と変数が含まれています。カスタム要件がある場合には、ソースファイルの変更が可能です。UnityScriptからPUNを使用するには、「PhotonNetwork」フォルダと「UtilityScripts」フォルダの両方を「Assets\Plugins\」フォルダに移動してください。APIがどのように動作するのか、以下にいくつかの例を示します。Top接続とマスターサーバーPhotonNetworkは常に、1つのマスターサーバーと1つまたは複数のゲームサーバーを使用します。マスターサーバーは、現在利用可能なゲームを管理し、マッチメイキングを行います。ルームが見つかるか、または作成されると、実際のゲームプレイはゲームサーバー上でおこなわれます。すべてのサーバーは、専用のマシンで実行されます。プレイヤーがホストするサーバはありません。PUNが管理をおこなうため、サーバーの構成を覚える必要もありません。PhotonNetwork.ConnectUsingSettings("v1.0");上記のコードさえあれば、接続してPhotonの機能を利用できます。Wizardによって書かれた)を使用します。PhotonServerSettingsを変更して独自のサーバーに接続することもできます。Connect()を使用してPhotonServerSettingsファイルを無視することもできます。PhotonNetworkにはオフラインモードがあり、このモードでは、なにも書き換えることなくディベロッパーは簡単にシングルプレイヤーのゲームプレイや機能を実装できます。マッチメイキングの詳細については、PhotonNetworkオフラインモードを参照してください。Topゲームバージョンによるゲーム管理PhotonのLoadBalancingロジックは、他のユーザーのゲームから自分のゲームを区別するためにAppIdを使用します。プレイヤーはConnectUsingSettingsのパラメータ(上記参照)であるゲームバージョンでも区切られます。することで、ゲームの古いバージョンを壊すことなく、新しい機能を持つクライアントをリリースすることができます。Networkingバージョンが互いに互換性があることを保証できないので、PUNはゲームのバージョンに自身のバージョン番号を追加します。PUNを更新すると、古いクライアントから新しいクライアントを分離する可能性がありますが、古いクライアントが利用できなくなることはありません。次に、ルームに参加するか、またはルームを作成します。OnPhotonRandomJoinFailedベストケースでは、ゲームはランダムマッチメイキングを使用します。任意のルームに参加しようとします。これが失敗した(ルームが新たなプレイヤーを受け入れない)場合には、新しいルームを作成して他のプレイヤーがそのルームにランダムに参加するまで待ちます。クライアントは現在利用可能なルームのリストを取得することができます。これはロビーへの参加によっておこなわれます。ロビーは自動的に、クライアントにルームリストを送信して定期的に更新します(トラフィックを最小化するため)。プレイヤーは互いを見る事も通信する事もできません(ゲームが混雑している際の問題を防ぐため)。PhotonNetworkプラグインは接続の際、自動的にデフォルトのロビーに参加することができます。Lobby」のチェックボックスでオンにします。Lobbyチェックボックスがオフにされていると、OnConnectedToMasterコールバックが呼ばれます。OnConnectedToMasterはスキップされて、OnJoinedLobbyのみが呼ばれます。クライアントがロビーにいる際、ルームリストの更新を取得してキャッシュします。必要に応じて、フレームごとにGetRoomList経由でリストにアクセスすることができます。TopMonoBehaviourコールバックPhotonNetworkは、ゲームに「接続」または「ゲームに参加」のようなステータスの変更を知らせるため、いくつかのコールバックを使用します。Unityで通常おこなわれるよう、コールバックは任意のスクリプトで実装できます。スクリプトがPhoton.PunBehaviourを拡張する場合、個別のコールバックをそれぞれ上書きすることができます。その場合は、ベースの実装を呼び出す必要はありません。PhotonNetwork.room.name));}PunBehaviourを拡張する必要はありません。個別で実装した場合も、すべてのコールバックは動作します。PhotonNetworkingMessageにもリスト化され、説明されています。ここでは、ゲームルーム設定の基本を説明しました。次は、ゲーム内での実際の通信を説明します。Topゲームルームでのメッセージの送信ルーム内では、他の接続されたプレイヤーにネットワークメッセージを送信することができます。後から接続するプレイヤーにも送信されるバッファされたメッセージを送信できます(たとえば、プレイヤーをスポーンするなど)。メッセージの送信は、2つの方法を用いて実行できます。RPCを使用するか、またはPhotonViewによって監視されるスクリプト内で実装できます。ネットワークには、より多くのやり取りがあります。特定のネットワークイベントであるOnPhotonInstantiateまたはOnPhotonPlayerConnectedへのコールバックを聞いたり、たとえばPhotonNetwork.Instantiateなどのイベントをトリガーすることが可能です。最後の一文で混乱してしまったかもしれませんが、問題ありません。TopPhotonViewPhotonViewは、メッセージの送信(RPCとOOnSerializePhotonView)に使用されるスクリプトコンポーネントです。GameObjectまたはプレハブにPhotonViewを添付します。PhotonViewはUnityのNetworkViewと非常によく似ている点に留意してください。メッセージの送信や、オプションでPhotonViewをインスタンス化または割当てるには、常にゲームには少なくとも1つのPhotonViewが必要です。プレイヤー間で同期することができます。この機能は、プロトタイピングや規模の小さいゲームで役立ちます。備考:監視された値を変更すると、変更された値だけでなく、すべてのObserve値が送信されます。アップデートは円滑でなくなり、補間されます。TopMonoBehaviourを監視PhotonViewはMonoBehaviourを監視するよう設定できます。この場合、スクリプトのOnPhotonSerializeViewメソッドが呼ばれます。スクリプトがローカルのプレイヤーによって管理されているかどうかに応じて、オブジェクトのステートの書き込み、または読み込みのためにこのメソッドが呼び出されます。以下の簡単なコードは、わずか数行のコードで、キャラクターのステート同期を追加する方法を示しています。Optionフィールドで、いつ、どのようにアップデートが送信されるかを選択することができます。このフィールドはOnPhotonSerializeViewが呼び出される頻度に影響します。PhotonViewがRPCのみに予約されている場合に役立ちます。Unreliable(信頼性の低い)アップデートは、「そのまま」送信されますが、失われる可能性があります。概念としては、次のアップデートがすぐに到着し、必要となる正しい/絶対的な値を提供するということです。これは、位置やその他の絶対的なデータには役立ちますが、武器の交換などのトリガーには適していません。GameObjectの位置の同期に使用する場合には、GameObjectの移動が停止(望ましくないことですが)した場合でもこれは常にアップデートを送信します。Changeは各アップデートでの変更を確認します。すべての値が前回の送信と同一の場合、1つのアップデートが信頼性の高いものとして送信され、所有者は変更が発生するまでアップデートの送信を停止します。これは移動を停止し、しばらくの間アップデートを作成しないGameObjectに適しています。位置を設定後に移動しないボックスなどです。Compressedはアップデートの各値を、以前のものと比較します。トラフィックを低くするため、変更のない値はスキップされます。受信側は、前回のアップデートの値を埋めます。OnPhotonSerializeViewから書いたものはすべて自動的に確認され、この方法で圧縮されます。変更がない場合、受信クライアント上でOnPhotonSerializeViewは呼ばれません。「信頼性の高い」部分は重いため、小規模なアップデートの場合には、負荷を考慮する必要があります。以下では、他の通信方法について説明します:RPCです。Topリモートプロシージャコールリモートプロシージャコール(RPC)を使用すると、「ネットワーク化されたGameObject」上でメソッドを呼ぶことができます。これは、ユーザー入力などでトリガーされるなど頻度の低い動作で便利です。RPCは、同じルーム内の各プレイヤーによって同じGameObject上で実行されます。このため、シーン全体にエフェクトを簡単にトリガーできるのと同様に、GameObjectも容易に修正できます。RPCとして呼び出されるメソッドは、PhotonViewコンポーネントを持つGameObject上に存在しなければなりません。[PunRPC]でマークする必要があります。b));}メソッドを呼ぶには、対象となるオブジェクトのPhotonViewにアクセスします。jup!");パラメータのリストを送信できますが、このリストはRPCメソッドの定義と一致する必要があります。以上が基本的な設定です。詳細はリモートプロシージャコールを参照してください。