Engine続行するにはJavascriptを有効化してください。Realtimeインディーかプロのディベロッパーかを問わず、誰でもリアルタイムマルチプレイヤーゲームを開発してグローバルに配信可能です。PUNインディーかプロのディベロッパーかを問わず、誰でもリアルタイムマルチプレイヤーゲームを開発してグローバルに配信可能です。Quantumマルチプレイヤーゲーム開発の革新に参加しよう!MOBA、ブローラー、RTS、戦闘ゲーム、スポーツゲームを迅速な予測ネットワーキングエンジンで開発できます。Chat同時接続数をスケールできるクロスプラットフォームのチャットシステムをあなたのアプリに簡単に統合できます。Voice大規模かつインターナショナルな最先端のライブボイスチャット。すべてのマルチプレイヤーエンジンと併用可能。Classic(PUN1とも呼ばれます)はPUNのはじめの主要バージョンです。現在は、リファクタリングおよび機能拡張されたPUN2に切り替わっています。新しいプロジェクトはPUN2をご利用いただき、また可能であれば既存のプロジェクトについてもPUN1からPUN2へ移行していただくよう強く推奨しています。Cloassicは今後数か月メンテナンスされます。重要なバグの修正や新しいUnityバージョンのサポートは行いますが、新機能の追加はPUN2のみとなります。このページは編集中です。更新が保留になっている可能性があります。SDKを使用する方法を説明します。(Unityパッケージを含む)はじめにインポートが完了したら、既存のコンポーネントを拡張することができます。'RemoteAvatar'です。次にこれらの2つのプレハブを使用するか、それらのコピーを作成します。'Resources'フォルダの中に配置する必要があります。この場合、各プレハブのコピーは'Assets/Resources'にあります。次のステップでは、複数のクライアント間で同期を処理するPhotonView(後で添付します)コンポーネントによって監視されるスクリプトを実装する必要があります。remoteDriver;さらに、実際に他のクライアントに送信する前に、Avatarからのデータを格納するために使用するバイト配列のリストが必要です。packetData;UnityのStart関数を使うことで、以前のすべての参照とオブジェクトを設定できます。Avatar'の間を明確にすることができます。OvrAvatarコンポーネントへの参照を取得し、このデータをネットワーク経由で送信する前にすべてのアバター関連の入力イベントを格納するバイト配列のリストをインスタンス化します。オブジェクトが別のクライアントに属している場合は、後でOvrAvatarRemoteDriverコンポーネントへの参照を取得します。OvrAvatarRemoteDriverコンポーネントは、後で他のクライアントがジェスチャーを参照できるように入力を模倣するために使用されます。次に、私たちのジェスチャーを含む記録パケットを開始したり停止したりするために使用する、UnityのOnDisableメソッドが必要です。}次のステップでは、このパケットはPUNがサポートするバイト配列にシリアル化されます。その後、これは以前に作成したリストに追加され、ネットワーク上で送信される準備が整います。不要なデータの送信を避け、またメッセージサイズの超過によって発生する可能性のある切断を防止するには、関数のほかの部分を処理する必要があるか確認する条件をまず実装します。}シリアライザーがあるため、受信したパケットを非直列化するのに役立つデシリアライザーが必要です。このため、次のタスクはこの関数を実装することです。}この関数は受信バイト配列を非直列化してパケットデータを再作成し、パケットデータをOvrAvatarRemoteDriverコンポーネントにキューに入れてジェスチャーを再生します。この最後の部分のコーディングセクションは、記録されたパケットの交換を追加することです。この場合、定期的に自動的に呼び出され、結果として定期的な更新とスムーズな検索をおこなうOnPhotonSerializeViewを使用します。}分かりやすくするために、2つのパートに分けます。最初のパートは、ゲームオブジェクトのオーナーによって実行されるisWriting条件です。これはデータを送信する必要があるかどうかを最初に確認します。データを送信する必要がある場合、最初に送信される値はパケット数です。この情報は受信側にとって重要です。最終的には、記録されシリアル化されたすべてのパケットを送信し、リストに格納されている以前のパケットデータを消去します。このパケットデータはもう不要です。isReading条件は、オブジェクトを所有していないリモートクライアントでのみ実行されます。処理しなければならないパケットの数を確認してから、以前に実装した関数を呼び出します。その後、すべてのパケットデータを段階的に非直列化してキューに入れます。最後のステップは、両方のプレハブにPhotonViewコンポーネントと実装されたPhotonAvatarViewを添付することです。PhotonViewの監視されたコンポーネントにPhotonAvatarViewコンポーネントを追加してください。残念ながら、PhotonNetwork.Instantiateを呼び出すだけではネットワークAvatarをインスタンス化することができません。1つはインスタンス化するプレイヤーのための'LocalAvatar'で、もう1つは他の人のための'RemoteAvatar'です。したがって、手動インスタンス化を使用する必要があります。Managerや、ネットワークロジックを処理するその他のスクリプトに設定することができます。このコードは、以前に作成したPhotonAvatarViewスクリプトには属しません。この例では、まずAvatarに'ViewId'を割り当て、他のクライアントに通知ができるよう、キャッシュを有効にしたRaiseEvent関数を使用します。}次に、正しいプレハブがインスタンス化されていることを確認するOnEventコールバックハンドラーが必要になります。これら2つが同じ場合、このクライアントもイベントを発生させ、さらに'LocalAvatar'レハブをインスタンス化する必要があることがわかります。'RemoteAvatar'プレハブをインスタンス化する必要があります。ページを参照してください。}これはクライアントがすでにルームに入っているか、後に参加するかに関わらず、各接続クライアントで正しいAvatarをインスタンス化します。カスタムイベントが実行された点を確認する必要があります。このためには、以前に実装したOnEventコールバックを登録しなければなりません。この処理は、UnityのOnEnableおよびOnDisable関数によって処理されます(後にクリーンアップをおこないます)。}最後に、プレイヤーがゲームを離れたときに、各クライアントでAvatarが破壊されるようにしてください。TopテストAvatarの同期をテストするには、2つの方法があります。Controller)が接続されている必要があります。Unityエディターからゲームを開始するか、または最初にビルドを作成してから両方のマシンで実行して、ジェスチャーの同期に問題がないことを確認できます。別のアプローチは、第2のテストアプリケーションを構築することです。RemoteAvatarがインスタンス化される地点を見るためのメインカメラを配置して回転させる「空白の」プロジェクトとすることができます(このページの冒頭で言及したプラグインが必要です)。この場合、カメラは(0/0/0)を映すべきです。Photonに接続するときは、必ず同じAppIdとAppVersionを使用してください。インスタンス化イベントを処理するため、OnEventコールバックを実装して登録してください。Controller)を備えた1台のコンピュータのみが必要である点です。data)でInvalidCastExceptionsの問題が発生した場合、フォーラムユーザーcloud_canvasの回避策を確認してください。この回避策を適用するには、OvrAvatarクラスを開いて変更する必要があります。false;を追加することです。パブリックフィールド定義の最後にこの行を追加できます。true;を追加します。これにより、オブジェクトの初期化の状態に関する詳細情報が得られます。Platform自体を使用して、アバターポーズのパッケージを送受信する準備ができているかどうかを判断します。これを行うには、PhotonAvatarViewクラスにいくつかの調整を行う必要があります。OnLocalAvatarPacketRecorded関数では、ルーム内にいるかどうかと、ルームに少なくとも2人のプレイヤーがいるかどうかを確認しています。前述の条件もそれに追加します。この条件をより頻繁に使用するため、そのためのプロパティを作成し、PhotonAvatarViewクラスに追加します。Platformとアバターの両方が初期化されている場合、このプロパティはtrueを返します。この場合はアバターのポーズを送信または受信する準備ができています。data)関数の最初に置きます。これで問題が解決されているかどうかを確認できます。info)関数の先頭に上記の条件を追加することもできます。Integrationを更新するたびに(少なくともこの特定のファイルが変更された場合)これらの変更を適用する必要があります。